From 3f4b55a003c75020cecd63f724393e0a862d1f37 Mon Sep 17 00:00:00 2001 From: Davide De Rosa Date: Sat, 25 Jun 2022 22:11:45 +0200 Subject: [PATCH] Implement Mac bundle with system menu Use bundle as a means to provide Mac APIs to Catalyst app. In order to cross the @objc wall set by the Mac Bundle mechanism, Swift structures cannot be used directly and must be bridged through ObjC facades. Create NSMenu in MVVM style and install it on app launch. Make sure to do it in AppDelegate.applicationDidFinishLaunching(), because doing it as early as in PassepartoutApp.init() would crash Mac code. Use .representedObject to own view models. With menu in place, app can be sent to background when main window is closed. Requires multiple documents support for app not to die instantly. --- Config.xcconfig | 1 + Passepartout.xcodeproj/project.pbxproj | 446 +++++++++++++++++- .../xcschemes/PassepartoutMac.xcscheme | 67 +++ Passepartout/App/AppDelegate.swift | 39 ++ .../App/Constants/Constants+App.swift | 4 + Passepartout/App/Context/AppPreference.swift | 2 + Passepartout/App/Info.plist | 5 + .../Intents/IntentDispatcher+Activities.swift | 2 +- Passepartout/App/Mac/MacBundle.swift | 56 +++ Passepartout/App/Mac/MacBundleDelegate.swift | 46 ++ .../Models/DefaultLightProfileManager.swift | 106 +++++ .../Models/DefaultLightProviderManager.swift | 114 +++++ .../Mac/Models/DefaultLightVPNManager.swift | 120 +++++ Passepartout/App/PassepartoutApp.swift | 16 + Passepartout/App/swiftgen.yml | 8 - .../Constants/SwiftGen+Strings.swift | 62 +-- Passepartout/AppShared/Mac/MacBridge.swift | 35 ++ Passepartout/AppShared/Mac/MacMenu.swift | 42 ++ Passepartout/AppShared/Mac/MacUtils.swift | 41 ++ .../Mac/Models/LightProfileManager.swift | 65 +++ .../Mac/Models/LightProviderManager.swift | 69 +++ .../Mac/Models/LightVPNManager.swift | 59 +++ Passepartout/AppShared/Menu/MenuBuilder.swift | 37 ++ .../AppShared/Menu/MenuDelegate.swift | 31 ++ .../AppShared/en.lproj/Localizable.strings | 30 +- Passepartout/AppShared/swiftgen.yml | 6 - .../StatusActive.imageset/Contents.json | 20 + .../StatusActive.imageset/StatusActive@2x.png | Bin 0 -> 798 bytes .../StatusPending.imageset/Contents.json | 20 + .../StatusPending@2x.png | Bin 0 -> 1230 bytes Passepartout/Mac/Bridging-Header.h | 31 ++ .../Mac/Constants/Constants+Mac.swift | 36 ++ Passepartout/Mac/Constants/Theme.swift | 82 ++++ Passepartout/Mac/Flags.xcassets/Contents.json | 6 + .../Mac/Flags.xcassets/flags/Contents.json | 9 + .../flags/ad.imageset/Contents.json | 17 + .../flags/ad.imageset/ad@2x.png | Bin 0 -> 560 bytes .../flags/ae.imageset/Contents.json | 17 + .../flags/ae.imageset/ae@2x.png | Bin 0 -> 249 bytes .../flags/af.imageset/Contents.json | 17 + .../flags/af.imageset/af@2x.png | Bin 0 -> 587 bytes .../flags/ag.imageset/Contents.json | 17 + .../flags/ag.imageset/ag@2x.png | Bin 0 -> 919 bytes .../flags/ai.imageset/Contents.json | 17 + .../flags/ai.imageset/ai@2x.png | Bin 0 -> 1160 bytes .../flags/al.imageset/Contents.json | 17 + .../flags/al.imageset/al@2x.png | Bin 0 -> 740 bytes .../flags/am.imageset/Contents.json | 17 + .../flags/am.imageset/am@2x.png | Bin 0 -> 191 bytes .../flags/ao.imageset/Contents.json | 17 + .../flags/ao.imageset/ao@2x.png | Bin 0 -> 522 bytes .../flags/aq.imageset/Contents.json | 17 + .../flags/aq.imageset/aq@2x.png | Bin 0 -> 624 bytes .../flags/ar.imageset/Contents.json | 17 + .../flags/ar.imageset/ar@2x.png | Bin 0 -> 391 bytes .../flags/as.imageset/Contents.json | 17 + .../flags/as.imageset/as@2x.png | Bin 0 -> 1097 bytes .../flags/at.imageset/Contents.json | 17 + .../flags/at.imageset/at@2x.png | Bin 0 -> 185 bytes .../flags/au.imageset/Contents.json | 17 + .../flags/au.imageset/au@2x.png | Bin 0 -> 1250 bytes .../flags/aw.imageset/Contents.json | 17 + .../flags/aw.imageset/aw@2x.png | Bin 0 -> 470 bytes .../flags/ax.imageset/Contents.json | 17 + .../flags/ax.imageset/ax@2x.png | Bin 0 -> 341 bytes .../flags/az.imageset/Contents.json | 17 + .../flags/az.imageset/az@2x.png | Bin 0 -> 490 bytes .../flags/ba.imageset/Contents.json | 17 + .../flags/ba.imageset/ba@2x.png | Bin 0 -> 951 bytes .../flags/bb.imageset/Contents.json | 17 + .../flags/bb.imageset/bb@2x.png | Bin 0 -> 460 bytes .../flags/bd.imageset/Contents.json | 17 + .../flags/bd.imageset/bd@2x.png | Bin 0 -> 531 bytes .../flags/be.imageset/Contents.json | 17 + .../flags/be.imageset/be@2x.png | Bin 0 -> 169 bytes .../flags/bf.imageset/Contents.json | 17 + .../flags/bf.imageset/bf@2x.png | Bin 0 -> 529 bytes .../flags/bg.imageset/Contents.json | 17 + .../flags/bg.imageset/bg@2x.png | Bin 0 -> 205 bytes .../flags/bh.imageset/Contents.json | 17 + .../flags/bh.imageset/bh@2x.png | Bin 0 -> 601 bytes .../flags/bi.imageset/Contents.json | 17 + .../flags/bi.imageset/bi@2x.png | Bin 0 -> 956 bytes .../flags/bj.imageset/Contents.json | 17 + .../flags/bj.imageset/bj@2x.png | Bin 0 -> 194 bytes .../flags/bl.imageset/Contents.json | 17 + .../flags/bl.imageset/bl@2x.png | Bin 0 -> 172 bytes .../flags/bm.imageset/Contents.json | 17 + .../flags/bm.imageset/bm@2x.png | Bin 0 -> 979 bytes .../flags/bn.imageset/Contents.json | 17 + .../flags/bn.imageset/bn@2x.png | Bin 0 -> 1292 bytes .../flags/bo.imageset/Contents.json | 17 + .../flags/bo.imageset/bo@2x.png | Bin 0 -> 467 bytes .../flags/bq.imageset/Contents.json | 17 + .../flags/bq.imageset/bq@2x.png | Bin 0 -> 213 bytes .../flags/br.imageset/Contents.json | 17 + .../flags/br.imageset/br@2x.png | Bin 0 -> 1312 bytes .../flags/bs.imageset/Contents.json | 17 + .../flags/bs.imageset/bs@2x.png | Bin 0 -> 647 bytes .../flags/bt.imageset/Contents.json | 17 + .../flags/bt.imageset/bt@2x.png | Bin 0 -> 1139 bytes .../flags/bv.imageset/Contents.json | 17 + .../flags/bv.imageset/bv@2x.png | Bin 0 -> 380 bytes .../flags/bw.imageset/Contents.json | 17 + .../flags/bw.imageset/bw@2x.png | Bin 0 -> 232 bytes .../flags/by.imageset/Contents.json | 17 + .../flags/by.imageset/by@2x.png | Bin 0 -> 717 bytes .../flags/bz.imageset/Contents.json | 17 + .../flags/bz.imageset/bz@2x.png | Bin 0 -> 1505 bytes .../flags/ca.imageset/Contents.json | 17 + .../flags/ca.imageset/ca@2x.png | Bin 0 -> 450 bytes .../flags/cc.imageset/Contents.json | 17 + .../flags/cc.imageset/cc@2x.png | Bin 0 -> 650 bytes .../flags/cd.imageset/Contents.json | 17 + .../flags/cd.imageset/cd@2x.png | Bin 0 -> 910 bytes .../flags/cf.imageset/Contents.json | 17 + .../flags/cf.imageset/cf@2x.png | Bin 0 -> 466 bytes .../flags/cg.imageset/Contents.json | 17 + .../flags/cg.imageset/cg@2x.png | Bin 0 -> 273 bytes .../flags/ch.imageset/Contents.json | 17 + .../flags/ch.imageset/ch@2x.png | Bin 0 -> 310 bytes .../flags/ci.imageset/Contents.json | 17 + .../flags/ci.imageset/ci@2x.png | Bin 0 -> 166 bytes .../flags/ck.imageset/Contents.json | 17 + .../flags/ck.imageset/ck@2x.png | Bin 0 -> 1326 bytes .../flags/cl.imageset/Contents.json | 17 + .../flags/cl.imageset/cl@2x.png | Bin 0 -> 363 bytes .../flags/cm.imageset/Contents.json | 17 + .../flags/cm.imageset/cm@2x.png | Bin 0 -> 304 bytes .../flags/cn.imageset/Contents.json | 17 + .../flags/cn.imageset/cn@2x.png | Bin 0 -> 472 bytes .../flags/co.imageset/Contents.json | 17 + .../flags/co.imageset/co@2x.png | Bin 0 -> 208 bytes .../flags/cr.imageset/Contents.json | 17 + .../flags/cr.imageset/cr@2x.png | Bin 0 -> 253 bytes .../flags/cu.imageset/Contents.json | 17 + .../flags/cu.imageset/cu@2x.png | Bin 0 -> 766 bytes .../flags/cv.imageset/Contents.json | 17 + .../flags/cv.imageset/cv@2x.png | Bin 0 -> 711 bytes .../flags/cw.imageset/Contents.json | 17 + .../flags/cw.imageset/cw@2x.png | Bin 0 -> 410 bytes .../flags/cx.imageset/Contents.json | 17 + .../flags/cx.imageset/cx@2x.png | Bin 0 -> 882 bytes .../flags/cy.imageset/Contents.json | 17 + .../flags/cy.imageset/cy@2x.png | Bin 0 -> 736 bytes .../flags/cz.imageset/Contents.json | 17 + .../flags/cz.imageset/cz@2x.png | Bin 0 -> 415 bytes .../flags/de.imageset/Contents.json | 17 + .../flags/de.imageset/de@2x.png | Bin 0 -> 186 bytes .../flags/dj.imageset/Contents.json | 17 + .../flags/dj.imageset/dj@2x.png | Bin 0 -> 506 bytes .../flags/dk.imageset/Contents.json | 17 + .../flags/dk.imageset/dk@2x.png | Bin 0 -> 276 bytes .../flags/dm.imageset/Contents.json | 17 + .../flags/dm.imageset/dm@2x.png | Bin 0 -> 881 bytes .../flags/do.imageset/Contents.json | 17 + .../flags/do.imageset/do@2x.png | Bin 0 -> 440 bytes .../flags/dz.imageset/Contents.json | 17 + .../flags/dz.imageset/dz@2x.png | Bin 0 -> 627 bytes .../flags/ec.imageset/Contents.json | 17 + .../flags/ec.imageset/ec@2x.png | Bin 0 -> 1253 bytes .../flags/ee.imageset/Contents.json | 17 + .../flags/ee.imageset/ee@2x.png | Bin 0 -> 203 bytes .../flags/eg.imageset/Contents.json | 17 + .../flags/eg.imageset/eg@2x.png | Bin 0 -> 401 bytes .../flags/eh.imageset/Contents.json | 17 + .../flags/eh.imageset/eh@2x.png | Bin 0 -> 645 bytes .../flags/er.imageset/Contents.json | 17 + .../flags/er.imageset/er@2x.png | Bin 0 -> 1176 bytes .../flags/es-ct.imageset/Contents.json | 17 + .../flags/es-ct.imageset/es-ct@2x.png | Bin 0 -> 330 bytes .../flags/es.imageset/Contents.json | 17 + .../flags/es.imageset/es@2x.png | Bin 0 -> 579 bytes .../flags/et.imageset/Contents.json | 17 + .../flags/et.imageset/et@2x.png | Bin 0 -> 687 bytes .../flags/eu.imageset/Contents.json | 17 + .../flags/eu.imageset/eu@2x.png | Bin 0 -> 661 bytes .../flags/fi.imageset/Contents.json | 17 + .../flags/fi.imageset/fi@2x.png | Bin 0 -> 266 bytes .../flags/fj.imageset/Contents.json | 17 + .../flags/fj.imageset/fj@2x.png | Bin 0 -> 1181 bytes .../flags/fk.imageset/Contents.json | 17 + .../flags/fk.imageset/fk@2x.png | Bin 0 -> 1608 bytes .../flags/fm.imageset/Contents.json | 17 + .../flags/fm.imageset/fm@2x.png | Bin 0 -> 556 bytes .../flags/fo.imageset/Contents.json | 17 + .../flags/fo.imageset/fo@2x.png | Bin 0 -> 406 bytes .../flags/fr.imageset/Contents.json | 17 + .../flags/fr.imageset/fr@2x.png | Bin 0 -> 172 bytes .../flags/ga.imageset/Contents.json | 17 + .../flags/ga.imageset/ga@2x.png | Bin 0 -> 206 bytes .../flags/gb-eng.imageset/Contents.json | 17 + .../flags/gb-eng.imageset/gb-eng@2x.png | Bin 0 -> 223 bytes .../flags/gb-nir.imageset/Contents.json | 17 + .../flags/gb-nir.imageset/gb-nir@2x.png | Bin 0 -> 681 bytes .../flags/gb-sct.imageset/Contents.json | 17 + .../flags/gb-sct.imageset/gb-sct@2x.png | Bin 0 -> 892 bytes .../flags/gb-wls.imageset/Contents.json | 17 + .../flags/gb-wls.imageset/gb-wls@2x.png | Bin 0 -> 1502 bytes .../flags/gb.imageset/Contents.json | 17 + .../flags/gb.imageset/gb@2x.png | Bin 0 -> 1250 bytes .../flags/gd.imageset/Contents.json | 17 + .../flags/gd.imageset/gd@2x.png | Bin 0 -> 1114 bytes .../flags/ge.imageset/Contents.json | 17 + .../flags/ge.imageset/ge@2x.png | Bin 0 -> 330 bytes .../flags/gf.imageset/Contents.json | 17 + .../flags/gf.imageset/gf@2x.png | Bin 0 -> 475 bytes .../flags/gg.imageset/Contents.json | 17 + .../flags/gg.imageset/gg@2x.png | Bin 0 -> 540 bytes .../flags/gh.imageset/Contents.json | 17 + .../flags/gh.imageset/gh@2x.png | Bin 0 -> 416 bytes .../flags/gi.imageset/Contents.json | 17 + .../flags/gi.imageset/gi@2x.png | Bin 0 -> 861 bytes .../flags/gl.imageset/Contents.json | 17 + .../flags/gl.imageset/gl@2x.png | Bin 0 -> 593 bytes .../flags/gm.imageset/Contents.json | 17 + .../flags/gm.imageset/gm@2x.png | Bin 0 -> 235 bytes .../flags/gn.imageset/Contents.json | 17 + .../flags/gn.imageset/gn@2x.png | Bin 0 -> 162 bytes .../flags/gp.imageset/Contents.json | 17 + .../flags/gp.imageset/gp@2x.png | Bin 0 -> 172 bytes .../flags/gq.imageset/Contents.json | 17 + .../flags/gq.imageset/gq@2x.png | Bin 0 -> 621 bytes .../flags/gr.imageset/Contents.json | 17 + .../flags/gr.imageset/gr@2x.png | Bin 0 -> 535 bytes .../flags/gs.imageset/Contents.json | 17 + .../flags/gs.imageset/gs@2x.png | Bin 0 -> 1815 bytes .../flags/gt.imageset/Contents.json | 17 + .../flags/gt.imageset/gt@2x.png | Bin 0 -> 405 bytes .../flags/gu.imageset/Contents.json | 17 + .../flags/gu.imageset/gu@2x.png | Bin 0 -> 949 bytes .../flags/gw.imageset/Contents.json | 17 + .../flags/gw.imageset/gw@2x.png | Bin 0 -> 370 bytes .../flags/gy.imageset/Contents.json | 17 + .../flags/gy.imageset/gy@2x.png | Bin 0 -> 1143 bytes .../flags/hk.imageset/Contents.json | 17 + .../flags/hk.imageset/hk@2x.png | Bin 0 -> 689 bytes .../flags/hm.imageset/Contents.json | 17 + .../flags/hm.imageset/hm@2x.png | Bin 0 -> 1293 bytes .../flags/hn.imageset/Contents.json | 17 + .../flags/hn.imageset/hn@2x.png | Bin 0 -> 467 bytes .../flags/hr.imageset/Contents.json | 17 + .../flags/hr.imageset/hr@2x.png | Bin 0 -> 760 bytes .../flags/ht.imageset/Contents.json | 17 + .../flags/ht.imageset/ht@2x.png | Bin 0 -> 436 bytes .../flags/hu.imageset/Contents.json | 17 + .../flags/hu.imageset/hu@2x.png | Bin 0 -> 207 bytes .../flags/id.imageset/Contents.json | 17 + .../flags/id.imageset/id@2x.png | Bin 0 -> 164 bytes .../flags/ie.imageset/Contents.json | 17 + .../flags/ie.imageset/ie@2x.png | Bin 0 -> 171 bytes .../flags/il.imageset/Contents.json | 17 + .../flags/il.imageset/il@2x.png | Bin 0 -> 618 bytes .../flags/im.imageset/Contents.json | 17 + .../flags/im.imageset/im@2x.png | Bin 0 -> 853 bytes .../flags/in.imageset/Contents.json | 17 + .../flags/in.imageset/in@2x.png | Bin 0 -> 411 bytes .../flags/io.imageset/Contents.json | 17 + .../flags/io.imageset/io@2x.png | Bin 0 -> 2580 bytes .../flags/iq.imageset/Contents.json | 17 + .../flags/iq.imageset/iq@2x.png | Bin 0 -> 440 bytes .../flags/ir.imageset/Contents.json | 17 + .../flags/ir.imageset/ir@2x.png | Bin 0 -> 837 bytes .../flags/is.imageset/Contents.json | 17 + .../flags/is.imageset/is@2x.png | Bin 0 -> 403 bytes .../flags/it.imageset/Contents.json | 17 + .../flags/it.imageset/it@2x.png | Bin 0 -> 172 bytes .../flags/je.imageset/Contents.json | 17 + .../flags/je.imageset/je@2x.png | Bin 0 -> 1257 bytes .../flags/jm.imageset/Contents.json | 17 + .../flags/jm.imageset/jm@2x.png | Bin 0 -> 835 bytes .../flags/jo.imageset/Contents.json | 17 + .../flags/jo.imageset/jo@2x.png | Bin 0 -> 452 bytes .../flags/jp.imageset/Contents.json | 17 + .../flags/jp.imageset/jp@2x.png | Bin 0 -> 478 bytes .../flags/ke.imageset/Contents.json | 17 + .../flags/ke.imageset/ke@2x.png | Bin 0 -> 667 bytes .../flags/kg.imageset/Contents.json | 17 + .../flags/kg.imageset/kg@2x.png | Bin 0 -> 829 bytes .../flags/kh.imageset/Contents.json | 17 + .../flags/kh.imageset/kh@2x.png | Bin 0 -> 689 bytes .../flags/ki.imageset/Contents.json | 17 + .../flags/ki.imageset/ki@2x.png | Bin 0 -> 1613 bytes .../flags/km.imageset/Contents.json | 17 + .../flags/km.imageset/km@2x.png | Bin 0 -> 892 bytes .../flags/kn.imageset/Contents.json | 17 + .../flags/kn.imageset/kn@2x.png | Bin 0 -> 965 bytes .../flags/kp.imageset/Contents.json | 17 + .../flags/kp.imageset/kp@2x.png | Bin 0 -> 693 bytes .../flags/kr.imageset/Contents.json | 17 + .../flags/kr.imageset/kr@2x.png | Bin 0 -> 1325 bytes .../flags/kw.imageset/Contents.json | 17 + .../flags/kw.imageset/kw@2x.png | Bin 0 -> 409 bytes .../flags/ky.imageset/Contents.json | 17 + .../flags/ky.imageset/ky@2x.png | Bin 0 -> 1533 bytes .../flags/kz.imageset/Contents.json | 17 + .../flags/kz.imageset/kz@2x.png | Bin 0 -> 1384 bytes .../flags/la.imageset/Contents.json | 17 + .../flags/la.imageset/la@2x.png | Bin 0 -> 448 bytes .../flags/lb.imageset/Contents.json | 17 + .../flags/lb.imageset/lb@2x.png | Bin 0 -> 703 bytes .../flags/lc.imageset/Contents.json | 17 + .../flags/lc.imageset/lc@2x.png | Bin 0 -> 659 bytes .../flags/li.imageset/Contents.json | 17 + .../flags/li.imageset/li@2x.png | Bin 0 -> 425 bytes .../flags/lk.imageset/Contents.json | 17 + .../flags/lk.imageset/lk@2x.png | Bin 0 -> 861 bytes .../flags/lr.imageset/Contents.json | 17 + .../flags/lr.imageset/lr@2x.png | Bin 0 -> 616 bytes .../flags/ls.imageset/Contents.json | 17 + .../flags/ls.imageset/ls@2x.png | Bin 0 -> 435 bytes .../flags/lt.imageset/Contents.json | 17 + .../flags/lt.imageset/lt@2x.png | Bin 0 -> 223 bytes .../flags/lu.imageset/Contents.json | 17 + .../flags/lu.imageset/lu@2x.png | Bin 0 -> 230 bytes .../flags/lv.imageset/Contents.json | 17 + .../flags/lv.imageset/lv@2x.png | Bin 0 -> 166 bytes .../flags/ly.imageset/Contents.json | 17 + .../flags/ly.imageset/ly@2x.png | Bin 0 -> 399 bytes .../flags/ma.imageset/Contents.json | 17 + .../flags/ma.imageset/ma@2x.png | Bin 0 -> 326 bytes .../flags/mc.imageset/Contents.json | 17 + .../flags/mc.imageset/mc@2x.png | Bin 0 -> 166 bytes .../flags/md.imageset/Contents.json | 17 + .../flags/md.imageset/md@2x.png | Bin 0 -> 954 bytes .../flags/me.imageset/Contents.json | 17 + .../flags/me.imageset/me@2x.png | Bin 0 -> 832 bytes .../flags/mf.imageset/Contents.json | 17 + .../flags/mf.imageset/mf@2x.png | Bin 0 -> 172 bytes .../flags/mg.imageset/Contents.json | 17 + .../flags/mg.imageset/mg@2x.png | Bin 0 -> 191 bytes .../flags/mh.imageset/Contents.json | 17 + .../flags/mh.imageset/mh@2x.png | Bin 0 -> 1394 bytes .../flags/mk.imageset/Contents.json | 17 + .../flags/mk.imageset/mk@2x.png | Bin 0 -> 1099 bytes .../flags/ml.imageset/Contents.json | 17 + .../flags/ml.imageset/ml@2x.png | Bin 0 -> 172 bytes .../flags/mm.imageset/Contents.json | 17 + .../flags/mm.imageset/mm@2x.png | Bin 0 -> 679 bytes .../flags/mn.imageset/Contents.json | 17 + .../flags/mn.imageset/mn@2x.png | Bin 0 -> 458 bytes .../flags/mo.imageset/Contents.json | 17 + .../flags/mo.imageset/mo@2x.png | Bin 0 -> 777 bytes .../flags/mp.imageset/Contents.json | 17 + .../flags/mp.imageset/mp@2x.png | Bin 0 -> 1392 bytes .../flags/mq.imageset/Contents.json | 17 + .../flags/mq.imageset/mq@2x.png | Bin 0 -> 172 bytes .../flags/mr.imageset/Contents.json | 17 + .../flags/mr.imageset/mr@2x.png | Bin 0 -> 674 bytes .../flags/ms.imageset/Contents.json | 17 + .../flags/ms.imageset/ms@2x.png | Bin 0 -> 1383 bytes .../flags/mt.imageset/Contents.json | 17 + .../flags/mt.imageset/mt@2x.png | Bin 0 -> 449 bytes .../flags/mu.imageset/Contents.json | 17 + .../flags/mu.imageset/mu@2x.png | Bin 0 -> 235 bytes .../flags/mv.imageset/Contents.json | 17 + .../flags/mv.imageset/mv@2x.png | Bin 0 -> 388 bytes .../flags/mw.imageset/Contents.json | 17 + .../flags/mw.imageset/mw@2x.png | Bin 0 -> 574 bytes .../flags/mx.imageset/Contents.json | 17 + .../flags/mx.imageset/mx@2x.png | Bin 0 -> 454 bytes .../flags/my.imageset/Contents.json | 17 + .../flags/my.imageset/my@2x.png | Bin 0 -> 949 bytes .../flags/mz.imageset/Contents.json | 17 + .../flags/mz.imageset/mz@2x.png | Bin 0 -> 656 bytes .../flags/na.imageset/Contents.json | 17 + .../flags/na.imageset/na@2x.png | Bin 0 -> 1104 bytes .../flags/nc.imageset/Contents.json | 17 + .../flags/nc.imageset/nc@2x.png | Bin 0 -> 172 bytes .../flags/ne.imageset/Contents.json | 17 + .../flags/ne.imageset/ne@2x.png | Bin 0 -> 378 bytes .../flags/nf.imageset/Contents.json | 17 + .../flags/nf.imageset/nf@2x.png | Bin 0 -> 638 bytes .../flags/ng.imageset/Contents.json | 17 + .../flags/ng.imageset/ng@2x.png | Bin 0 -> 172 bytes .../flags/ni.imageset/Contents.json | 17 + .../flags/ni.imageset/ni@2x.png | Bin 0 -> 432 bytes .../flags/nl.imageset/Contents.json | 17 + .../flags/nl.imageset/nl@2x.png | Bin 0 -> 216 bytes .../flags/no.imageset/Contents.json | 17 + .../flags/no.imageset/no@2x.png | Bin 0 -> 377 bytes .../flags/np.imageset/Contents.json | 17 + .../flags/np.imageset/np@2x.png | Bin 0 -> 944 bytes .../flags/nr.imageset/Contents.json | 17 + .../flags/nr.imageset/nr@2x.png | Bin 0 -> 472 bytes .../flags/nu.imageset/Contents.json | 17 + .../flags/nu.imageset/nu@2x.png | Bin 0 -> 1478 bytes .../flags/nz.imageset/Contents.json | 17 + .../flags/nz.imageset/nz@2x.png | Bin 0 -> 1080 bytes .../flags/om.imageset/Contents.json | 17 + .../flags/om.imageset/om@2x.png | Bin 0 -> 405 bytes .../flags/pa.imageset/Contents.json | 17 + .../flags/pa.imageset/pa@2x.png | Bin 0 -> 577 bytes .../flags/pe.imageset/Contents.json | 17 + .../flags/pe.imageset/pe@2x.png | Bin 0 -> 838 bytes .../flags/pf.imageset/Contents.json | 17 + .../flags/pf.imageset/pf@2x.png | Bin 0 -> 670 bytes .../flags/pg.imageset/Contents.json | 17 + .../flags/pg.imageset/pg@2x.png | Bin 0 -> 780 bytes .../flags/ph.imageset/Contents.json | 17 + .../flags/ph.imageset/ph@2x.png | Bin 0 -> 929 bytes .../flags/pk.imageset/Contents.json | 17 + .../flags/pk.imageset/pk@2x.png | Bin 0 -> 552 bytes .../flags/pl.imageset/Contents.json | 17 + .../flags/pl.imageset/pl@2x.png | Bin 0 -> 177 bytes .../flags/pm.imageset/Contents.json | 17 + .../flags/pm.imageset/pm@2x.png | Bin 0 -> 172 bytes .../flags/pn.imageset/Contents.json | 17 + .../flags/pn.imageset/pn@2x.png | Bin 0 -> 1616 bytes .../flags/pr.imageset/Contents.json | 17 + .../flags/pr.imageset/pr@2x.png | Bin 0 -> 770 bytes .../flags/ps.imageset/Contents.json | 17 + .../flags/ps.imageset/ps@2x.png | Bin 0 -> 386 bytes .../flags/pt.imageset/Contents.json | 17 + .../flags/pt.imageset/pt@2x.png | Bin 0 -> 641 bytes .../flags/pw.imageset/Contents.json | 17 + .../flags/pw.imageset/pw@2x.png | Bin 0 -> 515 bytes .../flags/py.imageset/Contents.json | 17 + .../flags/py.imageset/py@2x.png | Bin 0 -> 396 bytes .../flags/qa.imageset/Contents.json | 17 + .../flags/qa.imageset/qa@2x.png | Bin 0 -> 581 bytes .../flags/re.imageset/Contents.json | 17 + .../flags/re.imageset/re@2x.png | Bin 0 -> 172 bytes .../flags/ro.imageset/Contents.json | 17 + .../flags/ro.imageset/ro@2x.png | Bin 0 -> 173 bytes .../flags/rs.imageset/Contents.json | 17 + .../flags/rs.imageset/rs@2x.png | Bin 0 -> 1221 bytes .../flags/ru.imageset/Contents.json | 17 + .../flags/ru.imageset/ru@2x.png | Bin 0 -> 205 bytes .../flags/rw.imageset/Contents.json | 17 + .../flags/rw.imageset/rw@2x.png | Bin 0 -> 439 bytes .../flags/sa.imageset/Contents.json | 17 + .../flags/sa.imageset/sa@2x.png | Bin 0 -> 792 bytes .../flags/sb.imageset/Contents.json | 17 + .../flags/sb.imageset/sb@2x.png | Bin 0 -> 859 bytes .../flags/sc.imageset/Contents.json | 17 + .../flags/sc.imageset/sc@2x.png | Bin 0 -> 880 bytes .../flags/sd.imageset/Contents.json | 17 + .../flags/sd.imageset/sd@2x.png | Bin 0 -> 443 bytes .../flags/se.imageset/Contents.json | 17 + .../flags/se.imageset/se@2x.png | Bin 0 -> 220 bytes .../flags/sg.imageset/Contents.json | 17 + .../flags/sg.imageset/sg@2x.png | Bin 0 -> 490 bytes .../flags/sh.imageset/Contents.json | 17 + .../flags/sh.imageset/sh@2x.png | Bin 0 -> 1433 bytes .../flags/si.imageset/Contents.json | 17 + .../flags/si.imageset/si@2x.png | Bin 0 -> 521 bytes .../flags/sj.imageset/Contents.json | 17 + .../flags/sj.imageset/sj@2x.png | Bin 0 -> 378 bytes .../flags/sk.imageset/Contents.json | 17 + .../flags/sk.imageset/sk@2x.png | Bin 0 -> 682 bytes .../flags/sl.imageset/Contents.json | 17 + .../flags/sl.imageset/sl@2x.png | Bin 0 -> 200 bytes .../flags/sm.imageset/Contents.json | 17 + .../flags/sm.imageset/sm@2x.png | Bin 0 -> 874 bytes .../flags/sn.imageset/Contents.json | 17 + .../flags/sn.imageset/sn@2x.png | Bin 0 -> 419 bytes .../flags/so.imageset/Contents.json | 17 + .../flags/so.imageset/so@2x.png | Bin 0 -> 407 bytes .../flags/sr.imageset/Contents.json | 17 + .../flags/sr.imageset/sr@2x.png | Bin 0 -> 437 bytes .../flags/ss.imageset/Contents.json | 17 + .../flags/ss.imageset/ss@2x.png | Bin 0 -> 812 bytes .../flags/st.imageset/Contents.json | 17 + .../flags/st.imageset/st@2x.png | Bin 0 -> 653 bytes .../flags/sv.imageset/Contents.json | 17 + .../flags/sv.imageset/sv@2x.png | Bin 0 -> 443 bytes .../flags/sx.imageset/Contents.json | 17 + .../flags/sx.imageset/sx@2x.png | Bin 0 -> 774 bytes .../flags/sy.imageset/Contents.json | 17 + .../flags/sy.imageset/sy@2x.png | Bin 0 -> 379 bytes .../flags/sz.imageset/Contents.json | 17 + .../flags/sz.imageset/sz@2x.png | Bin 0 -> 1006 bytes .../flags/tc.imageset/Contents.json | 17 + .../flags/tc.imageset/tc@2x.png | Bin 0 -> 1274 bytes .../flags/td.imageset/Contents.json | 17 + .../flags/td.imageset/td@2x.png | Bin 0 -> 160 bytes .../flags/tf.imageset/Contents.json | 17 + .../flags/tf.imageset/tf@2x.png | Bin 0 -> 711 bytes .../flags/tg.imageset/Contents.json | 17 + .../flags/tg.imageset/tg@2x.png | Bin 0 -> 448 bytes .../flags/th.imageset/Contents.json | 17 + .../flags/th.imageset/th@2x.png | Bin 0 -> 257 bytes .../flags/tj.imageset/Contents.json | 17 + .../flags/tj.imageset/tj@2x.png | Bin 0 -> 509 bytes .../flags/tk.imageset/Contents.json | 17 + .../flags/tk.imageset/tk@2x.png | Bin 0 -> 734 bytes .../flags/tl.imageset/Contents.json | 17 + .../flags/tl.imageset/tl@2x.png | Bin 0 -> 831 bytes .../flags/tm.imageset/Contents.json | 17 + .../flags/tm.imageset/tm@2x.png | Bin 0 -> 974 bytes .../flags/tn.imageset/Contents.json | 17 + .../flags/tn.imageset/tn@2x.png | Bin 0 -> 691 bytes .../flags/to.imageset/Contents.json | 17 + .../flags/to.imageset/to@2x.png | Bin 0 -> 369 bytes .../flags/tr.imageset/Contents.json | 17 + .../flags/tr.imageset/tr@2x.png | Bin 0 -> 693 bytes .../flags/tt.imageset/Contents.json | 17 + .../flags/tt.imageset/tt@2x.png | Bin 0 -> 963 bytes .../flags/tv.imageset/Contents.json | 17 + .../flags/tv.imageset/tv@2x.png | Bin 0 -> 1345 bytes .../flags/tw.imageset/Contents.json | 17 + .../flags/tw.imageset/tw@2x.png | Bin 0 -> 528 bytes .../flags/tz.imageset/Contents.json | 17 + .../flags/tz.imageset/tz@2x.png | Bin 0 -> 695 bytes .../flags/ua.imageset/Contents.json | 17 + .../flags/ua.imageset/ua@2x.png | Bin 0 -> 174 bytes .../flags/ug.imageset/Contents.json | 17 + .../flags/ug.imageset/ug@2x.png | Bin 0 -> 533 bytes .../flags/um.imageset/Contents.json | 17 + .../flags/um.imageset/um@2x.png | Bin 0 -> 1229 bytes .../flags/un.imageset/Contents.json | 17 + .../flags/un.imageset/un@2x.png | Bin 0 -> 751 bytes .../flags/us.imageset/Contents.json | 17 + .../flags/us.imageset/us@2x.png | Bin 0 -> 1167 bytes .../flags/uy.imageset/Contents.json | 17 + .../flags/uy.imageset/uy@2x.png | Bin 0 -> 730 bytes .../flags/uz.imageset/Contents.json | 17 + .../flags/uz.imageset/uz@2x.png | Bin 0 -> 462 bytes .../flags/va.imageset/Contents.json | 17 + .../flags/va.imageset/va@2x.png | Bin 0 -> 675 bytes .../flags/vc.imageset/Contents.json | 17 + .../flags/vc.imageset/vc@2x.png | Bin 0 -> 483 bytes .../flags/ve.imageset/Contents.json | 17 + .../flags/ve.imageset/ve@2x.png | Bin 0 -> 466 bytes .../flags/vg.imageset/Contents.json | 17 + .../flags/vg.imageset/vg@2x.png | Bin 0 -> 1435 bytes .../flags/vi.imageset/Contents.json | 17 + .../flags/vi.imageset/vi@2x.png | Bin 0 -> 1444 bytes .../flags/vn.imageset/Contents.json | 17 + .../flags/vn.imageset/vn@2x.png | Bin 0 -> 470 bytes .../flags/vu.imageset/Contents.json | 17 + .../flags/vu.imageset/vu@2x.png | Bin 0 -> 926 bytes .../flags/wf.imageset/Contents.json | 17 + .../flags/wf.imageset/wf@2x.png | Bin 0 -> 172 bytes .../flags/ws.imageset/Contents.json | 17 + .../flags/ws.imageset/ws@2x.png | Bin 0 -> 468 bytes .../flags/xk.imageset/Contents.json | 17 + .../flags/xk.imageset/xk@2x.png | Bin 0 -> 749 bytes .../flags/ye.imageset/Contents.json | 17 + .../flags/ye.imageset/ye@2x.png | Bin 0 -> 205 bytes .../flags/yt.imageset/Contents.json | 17 + .../flags/yt.imageset/yt@2x.png | Bin 0 -> 172 bytes .../flags/za.imageset/Contents.json | 17 + .../flags/za.imageset/za@2x.png | Bin 0 -> 1112 bytes .../flags/zm.imageset/Contents.json | 17 + .../flags/zm.imageset/zm@2x.png | Bin 0 -> 402 bytes .../flags/zw.imageset/Contents.json | 17 + .../flags/zw.imageset/zw@2x.png | Bin 0 -> 934 bytes Passepartout/Mac/Info.plist | 19 + Passepartout/Mac/Mac/DefaultMacMenu.swift | 41 ++ Passepartout/Mac/Mac/DefaultMacUtils.swift | 46 ++ .../Mac/Menu/HostProfileItem+ViewModel.swift | 43 ++ Passepartout/Mac/Menu/HostProfileItem.swift | 62 +++ .../Menu/LaunchOnLoginItem+ViewModel.swift | 77 +++ Passepartout/Mac/Menu/LaunchOnLoginItem.swift | 55 +++ .../Menu/PassepartoutMenu+StatusButton.swift | 87 ++++ Passepartout/Mac/Menu/PassepartoutMenu.swift | 117 +++++ Passepartout/Mac/Menu/ProfileItemGroup.swift | 61 +++ .../Menu/ProviderLocationItem+ViewModel.swift | 57 +++ .../Mac/Menu/ProviderLocationItem.swift | 71 +++ .../Menu/ProviderProfileItem+ViewModel.swift | 65 +++ .../Mac/Menu/ProviderProfileItem.swift | 95 ++++ .../Menu/ProviderServerItem+ViewModel.swift | 50 ++ .../Mac/Menu/ProviderServerItem.swift | 54 +++ .../Mac/Menu/VPNItemGroup+ViewModel.swift | 81 ++++ Passepartout/Mac/Menu/VPNItemGroup.swift | 76 +++ .../Mac/Menu/VisibilityItem+ViewModel.swift | 50 ++ Passepartout/Mac/Menu/VisibilityItem.swift | 50 ++ Passepartout/Mac/PassepartoutMac.swift | 36 ++ Passepartout/Mac/Reusable/Item.swift | 37 ++ Passepartout/Mac/Reusable/ItemGroup.swift | 31 ++ .../ObservableProcessTransformer.swift | 69 +++ .../Mac/Reusable/ProcessTransformer.h | 40 ++ .../Mac/Reusable/ProcessTransformer.m | 96 ++++ Passepartout/Mac/Reusable/SeparatorItem.swift | 33 ++ .../Mac/Reusable/StaticSystemMenu.swift | 47 ++ Passepartout/Mac/Reusable/SystemMenu.swift | 31 ++ .../Mac/Reusable/TextItem+ViewModel.swift | 67 +++ Passepartout/Mac/Reusable/TextItem.swift | 93 ++++ .../Managers/VPNManager.swift | 4 +- .../Models/ProviderLocation.swift | 13 +- .../Repositories/LocationMapper.swift | 15 +- .../Managers/DefaultVPNManager+Actions.swift | 10 +- .../Managers/DefaultVPNManager.swift | 16 - swiftgen.yml | 15 + 586 files changed, 7867 insertions(+), 125 deletions(-) create mode 100644 Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme create mode 100644 Passepartout/App/AppDelegate.swift create mode 100644 Passepartout/App/Mac/MacBundle.swift create mode 100644 Passepartout/App/Mac/MacBundleDelegate.swift create mode 100644 Passepartout/App/Mac/Models/DefaultLightProfileManager.swift create mode 100644 Passepartout/App/Mac/Models/DefaultLightProviderManager.swift create mode 100644 Passepartout/App/Mac/Models/DefaultLightVPNManager.swift delete mode 100644 Passepartout/App/swiftgen.yml create mode 100644 Passepartout/AppShared/Mac/MacBridge.swift create mode 100644 Passepartout/AppShared/Mac/MacMenu.swift create mode 100644 Passepartout/AppShared/Mac/MacUtils.swift create mode 100644 Passepartout/AppShared/Mac/Models/LightProfileManager.swift create mode 100644 Passepartout/AppShared/Mac/Models/LightProviderManager.swift create mode 100644 Passepartout/AppShared/Mac/Models/LightVPNManager.swift create mode 100644 Passepartout/AppShared/Menu/MenuBuilder.swift create mode 100644 Passepartout/AppShared/Menu/MenuDelegate.swift delete mode 100644 Passepartout/AppShared/swiftgen.yml create mode 100644 Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json create mode 100644 Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png create mode 100644 Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json create mode 100644 Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png create mode 100644 Passepartout/Mac/Bridging-Header.h create mode 100644 Passepartout/Mac/Constants/Constants+Mac.swift create mode 100644 Passepartout/Mac/Constants/Theme.swift create mode 100644 Passepartout/Mac/Flags.xcassets/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ae.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ae.imageset/ae@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/af.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/af.imageset/af@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ag.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ag.imageset/ag@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/al.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/al.imageset/al@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/am.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/am.imageset/am@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/as.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/as.imageset/as@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/aw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/aw.imageset/aw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ba.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ba.imageset/ba@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bb.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bb.imageset/bb@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bd.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bd.imageset/bd@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/be.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/be.imageset/be@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bj.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bj.imageset/bj@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bl.imageset/bl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bo.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bo.imageset/bo@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bs.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bs.imageset/bs@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bw.imageset/bw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/by.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/by.imageset/by@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cf.imageset/cf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cg.imageset/cg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cm.imageset/cm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cn.imageset/cn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/co.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/co.imageset/co@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cv.imageset/cv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cw.imageset/cw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cy.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cy.imageset/cy@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/cz.imageset/cz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/de.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/de.imageset/de@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dk.imageset/dk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dm.imageset/dm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/dz.imageset/dz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ec.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ec.imageset/ec@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/es-ct.imageset/es-ct@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/et.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/et.imageset/et@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/eu.imageset/eu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fk.imageset/fk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fm.imageset/fm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fo.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fo.imageset/fo@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-eng.imageset/gb-eng@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb-wls.imageset/gb-wls@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gd.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gd.imageset/gd@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ge.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ge.imageset/ge@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gf.imageset/gf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gg.imageset/gg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gh.imageset/gh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gl.imageset/gl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gm.imageset/gm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gw.imageset/gw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gy.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/gy.imageset/gy@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hn.imageset/hn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ht.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ht.imageset/ht@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/hu.imageset/hu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ie.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ie.imageset/ie@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/io.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/io.imageset/io@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/iq.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/iq.imageset/iq@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ir.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ir.imageset/ir@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/is.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/is.imageset/is@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/je.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/je.imageset/je@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ke.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ke.imageset/ke@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kn.imageset/kn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kp.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kp.imageset/kp@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/la.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/la.imageset/la@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lk.imageset/lk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ls.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ls.imageset/ls@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mc.imageset/mc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mm.imageset/mm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mp.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mp.imageset/mp@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mq.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mq.imageset/mq@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mu.imageset/mu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/mz.imageset/mz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/na.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/na.imageset/na@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nc.imageset/nc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nf.imageset/nf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ni.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ni.imageset/ni@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nl.imageset/nl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nr.imageset/nr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nu.imageset/nu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/om.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/om.imageset/om@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pg.imageset/pg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pl.imageset/pl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pm.imageset/pm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pr.imageset/pr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/pw.imageset/pw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/qa.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/qa.imageset/qa@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sa.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sa.imageset/sa@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sj.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sj.imageset/sj@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sr.imageset/sr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/st.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/st.imageset/st@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sv.imageset/sv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/td.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/td.imageset/td@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/th.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/th.imageset/th@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tj.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tj.imageset/tj@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tk.imageset/tk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/to.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/to.imageset/to@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tr.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tr.imageset/tr@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/tz.imageset/tz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ug.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ug.imageset/ug@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/un.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/un.imageset/un@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/uy.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/uy.imageset/uy@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vc.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vc.imageset/vc@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vi.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vi.imageset/vi@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vn.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vn.imageset/vn@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/xk.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/xk.imageset/xk@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/yt.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/yt.imageset/yt@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/zm.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/zm.imageset/zm@2x.png create mode 100644 Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json create mode 100644 Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png create mode 100644 Passepartout/Mac/Info.plist create mode 100644 Passepartout/Mac/Mac/DefaultMacMenu.swift create mode 100644 Passepartout/Mac/Mac/DefaultMacUtils.swift create mode 100644 Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/HostProfileItem.swift create mode 100644 Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/LaunchOnLoginItem.swift create mode 100644 Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift create mode 100644 Passepartout/Mac/Menu/PassepartoutMenu.swift create mode 100644 Passepartout/Mac/Menu/ProfileItemGroup.swift create mode 100644 Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/ProviderLocationItem.swift create mode 100644 Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/ProviderProfileItem.swift create mode 100644 Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/ProviderServerItem.swift create mode 100644 Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/VPNItemGroup.swift create mode 100644 Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift create mode 100644 Passepartout/Mac/Menu/VisibilityItem.swift create mode 100644 Passepartout/Mac/PassepartoutMac.swift create mode 100644 Passepartout/Mac/Reusable/Item.swift create mode 100644 Passepartout/Mac/Reusable/ItemGroup.swift create mode 100644 Passepartout/Mac/Reusable/ObservableProcessTransformer.swift create mode 100644 Passepartout/Mac/Reusable/ProcessTransformer.h create mode 100644 Passepartout/Mac/Reusable/ProcessTransformer.m create mode 100644 Passepartout/Mac/Reusable/SeparatorItem.swift create mode 100644 Passepartout/Mac/Reusable/StaticSystemMenu.swift create mode 100644 Passepartout/Mac/Reusable/SystemMenu.swift create mode 100644 Passepartout/Mac/Reusable/TextItem+ViewModel.swift create mode 100644 Passepartout/Mac/Reusable/TextItem.swift create mode 100644 swiftgen.yml diff --git a/Config.xcconfig b/Config.xcconfig index 79384feb..2449efd9 100644 --- a/Config.xcconfig +++ b/Config.xcconfig @@ -28,6 +28,7 @@ CFG_TEAM_ID = DTDYD63ZX9 CFG_APP_ID = com.algoritmico.ios.Passepartout +CFG_MAC_ID = com.algoritmico.ios.PassepartoutMac CFG_LAUNCHER_ID = com.algoritmico.ios.PassepartoutLauncher CFG_GROUP_ID = com.algoritmico.Passepartout CFG_APPSTORE_ID = 1433648537 diff --git a/Passepartout.xcodeproj/project.pbxproj b/Passepartout.xcodeproj/project.pbxproj index 0eeb95ed..dd32b69d 100644 --- a/Passepartout.xcodeproj/project.pbxproj +++ b/Passepartout.xcodeproj/project.pbxproj @@ -12,12 +12,19 @@ 0E0392772818732D00827C10 /* BuildProducts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0392762818732D00827C10 /* BuildProducts.swift */; }; 0E039279281890B100827C10 /* AddHostView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E039278281890B100827C10 /* AddHostView.swift */; }; 0E065F112813269500062CAF /* WelcomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E065F102813269500062CAF /* WelcomeView.swift */; }; + 0E0838F22872C5FB00A34EC0 /* ItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */; }; + 0E0838F82874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */; }; + 0E0838FA2877325A00A34EC0 /* LightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */; }; + 0E0838FB2877325A00A34EC0 /* LightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */; }; + 0E0838FD2877334300A34EC0 /* DefaultLightProviderManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */; }; 0E09E35D2834172800BE1BAE /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 0E09E35C2834172800BE1BAE /* Credits.rtf */; }; 0E0BD27327B2EA2C00583AC5 /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27227B2EA2C00583AC5 /* MainView.swift */; }; 0E0BD27627B2EB2200583AC5 /* DonateView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27527B2EB2200583AC5 /* DonateView.swift */; }; 0E0BD27927B2EBE500583AC5 /* ShortcutsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E0BD27827B2EBE500583AC5 /* ShortcutsView.swift */; }; 0E0C0729236087A100155AAC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E0C072B236087A100155AAC /* InfoPlist.strings */; }; 0E12BC8F27F62C8600B2F912 /* Validators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E12BC8E27F62C8500B2F912 /* Validators.swift */; }; + 0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */; }; + 0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */; }; 0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293850285A70AC002A6E0E /* AppPreference.swift */; }; 0E293857285A73BC002A6E0E /* AppContext+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E293856285A73BC002A6E0E /* AppContext+Shared.swift */; }; 0E29385C285A8B30002A6E0E /* CoreContext+Shared.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E29385B285A8B30002A6E0E /* CoreContext+Shared.swift */; }; @@ -40,6 +47,7 @@ 0E3B7FDA27E51A0200C66F13 /* ProfileView+Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */; }; 0E3CD47F280DA14B007075C0 /* AddProfileMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3CD47E280DA14B007075C0 /* AddProfileMenu.swift */; }; 0E3CD483280DAE92007075C0 /* ProfileView+MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */; }; + 0E3FC6862867A3F9009B851C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E3FC6852867A3F9009B851C /* AppDelegate.swift */; }; 0E41BD9A286711C3006346B4 /* PassepartoutLauncherApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E41BD99286711C3006346B4 /* PassepartoutLauncherApp.swift */; }; 0E41BDA72867128A006346B4 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E41BDA62867128A006346B4 /* AppDelegate.swift */; }; 0E41BDA928671356006346B4 /* PassepartoutLauncher.app in Embed Launcher */ = {isa = PBXBuildFile; fileRef = 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -54,6 +62,21 @@ 0E5349BE27C16A4500C71BB3 /* StyledPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349BD27C16A4500C71BB3 /* StyledPicker.swift */; }; 0E5349C627C176C200C71BB3 /* EndpointView+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349C527C176C200C71BB3 /* EndpointView+OpenVPN.swift */; }; 0E5349C827C176D100C71BB3 /* EndpointView+WireGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5349C727C176D100C71BB3 /* EndpointView+WireGuard.swift */; }; + 0E5467F02867A4C300F74D1C /* PassepartoutMac.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */; }; + 0E5467F32867A54600F74D1C /* MacBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F22867A54600F74D1C /* MacBundle.swift */; }; + 0E5467F72867A57000F74D1C /* MacBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F62867A57000F74D1C /* MacBridge.swift */; }; + 0E5467F82867A57000F74D1C /* MacBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F62867A57000F74D1C /* MacBridge.swift */; }; + 0E5467FA2867AA0A00F74D1C /* MacBundleDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */; }; + 0E5467FE2867AC4900F74D1C /* ProcessTransformer.m in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */; }; + 0E5468002867AC9A00F74D1C /* MacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FF2867AC9900F74D1C /* MacUtils.swift */; }; + 0E5468012867AC9A00F74D1C /* MacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5467FF2867AC9900F74D1C /* MacUtils.swift */; }; + 0E5468042867AD3500F74D1C /* DefaultMacUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */; }; + 0E5468062867AEC500F74D1C /* MacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468052867AEC500F74D1C /* MacMenu.swift */; }; + 0E5468072867AEC500F74D1C /* MacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468052867AEC500F74D1C /* MacMenu.swift */; }; + 0E5468092867AEF800F74D1C /* DefaultMacMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */; }; + 0E546810286BAF3100F74D1C /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54680F286BAF3100F74D1C /* Item.swift */; }; + 0E546814286BAF3D00F74D1C /* TextItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54680D286B676E00F74D1C /* TextItem.swift */; }; + 0E54681F286CA53C00F74D1C /* SeparatorItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */; }; 0E5683B927C2825D00EAF1CD /* DiagnosticsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */; }; 0E6059CB27FCC5DE003F4063 /* Flags.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E6059C827FCC5DD003F4063 /* Flags.xcassets */; }; 0E6059CC27FCC5DE003F4063 /* Providers.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E6059C927FCC5DE003F4063 /* Providers.xcassets */; }; @@ -76,13 +99,39 @@ 0E92D7C627F103300033CB7B /* ProfileView+Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */; }; 0E92D7C927F1042A0033CB7B /* ProfileView+Extra.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */; }; 0E92D7F427F104B80033CB7B /* ProfileView+Diagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E92D7F327F104B80033CB7B /* ProfileView+Diagnostics.swift */; }; + 0E96D2DE28704C3B005EFBCF /* TextItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */; }; + 0E96D2E028718E44005EFBCF /* VPNItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */; }; + 0E96D2E228718E78005EFBCF /* VPNItemGroup+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */; }; + 0E96D2E628718EF3005EFBCF /* ProfileItemGroup.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */; }; + 0E96D2EC2871A0AD005EFBCF /* HostProfileItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */; }; + 0E96D2EE2871B68C005EFBCF /* HostProfileItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */; }; + 0E96D2F02871C563005EFBCF /* PassepartoutMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */; }; + 0E96D2F22871C5CA005EFBCF /* StaticSystemMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */; }; + 0E96D2F42871CDAD005EFBCF /* VisibilityItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */; }; + 0E96D2F62871D1FE005EFBCF /* VisibilityItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */; }; + 0E96D2F92871D874005EFBCF /* LightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */; }; + 0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */; }; + 0E96D2FD2871D964005EFBCF /* LightProfileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */; }; + 0E96D2FE2871F688005EFBCF /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E9E5AE227B44CF1008C95DA /* Localizable.strings */; }; + 0E96D2FF2871F68B005EFBCF /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075F27EC587900208AD9 /* SwiftGen+Strings.swift */; }; + 0E96D3002871F6C8005EFBCF /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; + 0E96D30228720067005EFBCF /* LightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30128720067005EFBCF /* LightVPNManager.swift */; }; + 0E96D30328720067005EFBCF /* LightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30128720067005EFBCF /* LightVPNManager.swift */; }; + 0E96D3052872010A005EFBCF /* DefaultLightVPNManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */; }; + 0E96D30B28720ED9005EFBCF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0E96D30628720AA1005EFBCF /* Assets.xcassets */; }; + 0E96D30D287212FE005EFBCF /* LaunchOnLoginItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */; }; + 0E96D30F28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */; }; + 0E96D31128721855005EFBCF /* Constants+Mac.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D31028721855005EFBCF /* Constants+Mac.swift */; }; + 0E96D31428721FC3005EFBCF /* ObservableProcessTransformer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */; }; 0E9AA978259F756A003FAFF1 /* PacketTunnelProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9AA977259F756A003FAFF1 /* PacketTunnelProvider.swift */; }; 0E9C233027F47032007D5FC7 /* IntentsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9C232F27F47032007D5FC7 /* IntentsManager.swift */; }; 0E9C233327F47E95007D5FC7 /* IntentDispatcher+Activities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9C233227F47E95007D5FC7 /* IntentDispatcher+Activities.swift */; }; 0E9C3B6F27FC573E00D0F02E /* CloudKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E9C3B6E27FC573E00D0F02E /* CloudKit.framework */; }; 0E9E5AEF27B44CF1008C95DA /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0E9E5AE227B44CF1008C95DA /* Localizable.strings */; }; 0E9ED48127FD9BAE003B2316 /* CopySavingButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E9ED48027FD9BAE003B2316 /* CopySavingButton.swift */; }; + 0EA1D84728805EAE00F3CA48 /* Flags.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */; }; 0EA591162733DDDA0096F796 /* Intents.intentdefinition in Sources */ = {isa = PBXBuildFile; fileRef = 0EA591142733DDDA0096F796 /* Intents.intentdefinition */; }; + 0EA9030B287045F70087BC73 /* SystemMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EA9030A287045F70087BC73 /* SystemMenu.swift */; }; 0EB17EA727D226B400D473B5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; 0EB17EA927D226C900D473B5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA127D2263700D473B5 /* Constants.swift */; }; 0EB17EAA27D226C900D473B5 /* Constants+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EB17EA527D2263700D473B5 /* Constants+App.swift */; }; @@ -100,6 +149,7 @@ 0EBC075D27EC529000208AD9 /* DebugLog+Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075C27EC529000208AD9 /* DebugLog+Constants.swift */; }; 0EBC076027EC587900208AD9 /* SwiftGen+Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBC075F27EC587900208AD9 /* SwiftGen+Strings.swift */; }; 0EBE880F281B18DE0090D9E6 /* ProfileRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EBE880E281B18DE0090D9E6 /* ProfileRow.swift */; }; + 0ECB78E9285F5DE300B0E460 /* PassepartoutMac.bundle in Embed Plugins */ = {isa = PBXBuildFile; fileRef = 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */; platformFilter = maccatalyst; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 0ECB78EC2863A21600B0E460 /* PassepartoutLibrary in Frameworks */ = {isa = PBXBuildFile; productRef = 0ECB78EB2863A21600B0E460 /* PassepartoutLibrary */; }; 0ECF71EE27B6A99300CDB528 /* AccountView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ECF71ED27B6A99300CDB528 /* AccountView.swift */; }; 0ED1D6DC27DBA41700983466 /* DiagnosticsView+OpenVPN.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */; }; @@ -133,6 +183,11 @@ 0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF2212E27E66F60001D0BD7 /* AddProfileView.swift */; }; 0EF2213127E674BD001D0BD7 /* AddProviderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */; }; 0EF8C5A828213C510053CE89 /* OrganizerView+Profiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EF8C5A728213C510053CE89 /* OrganizerView+Profiles.swift */; }; + A3A7CC462878DC8300172D7D /* ProviderServerItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */; }; + A3A7CC482878DC9F00172D7D /* ProviderServerItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */; }; + A3A7CC4A28790BD900172D7D /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC4928790BD900172D7D /* Theme.swift */; }; + A3A7CC56287D56E800172D7D /* ProviderLocationItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */; }; + A3A7CC58287D576400172D7D /* ProviderLocationItem+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -148,32 +203,50 @@ containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0EDE8DBE20C86910004C739C; - remoteInfo = "PassepartoutTunnel-iOS"; + remoteInfo = PassepartoutTunnel; + }; + 0ECB78E6285F5CC400B0E460 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 0E57F63020C83FC5008323CF /* Project object */; + proxyType = 1; + remoteGlobalIDString = 0ECB78D9285F52F700B0E460; + remoteInfo = PassepartoutMac; }; 0ECF71FB27B6DA6700CDB528 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ECF71F327B6D9CD00CDB528; - remoteInfo = "PassepartoutWireGuard-iOS"; + remoteInfo = PassepartoutWireGuard; }; 0ED2B36127D3C99100FD8EA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ED2B33E27D3C77800FD8EA9; - remoteInfo = "WireGuardTunnel-iOS"; + remoteInfo = WireGuardTunnel; }; 0ED2B36A27D3CAB100FD8EA9 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 0E57F63020C83FC5008323CF /* Project object */; proxyType = 1; remoteGlobalIDString = 0ECF71F327B6D9CD00CDB528; - remoteInfo = "WireGuardGo-iOS"; + remoteInfo = WireGuardGo; }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 0E3152B7223F9EF500F61841 /* Embed Plugins */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 0ECB78E9285F5DE300B0E460 /* PassepartoutMac.bundle in Embed Plugins */, + ); + name = "Embed Plugins"; + runOnlyForDeploymentPostprocessing = 0; + }; 0E41BDA828671339006346B4 /* Embed Launcher */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -205,6 +278,10 @@ 0E0392762818732D00827C10 /* BuildProducts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BuildProducts.swift; sourceTree = ""; }; 0E039278281890B100827C10 /* AddHostView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddHostView.swift; sourceTree = ""; }; 0E065F102813269500062CAF /* WelcomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeView.swift; sourceTree = ""; }; + 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ItemGroup.swift; sourceTree = ""; }; + 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PassepartoutMenu+StatusButton.swift"; sourceTree = ""; }; + 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightProviderManager.swift; sourceTree = ""; }; + 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightProviderManager.swift; sourceTree = ""; }; 0E09E35C2834172800BE1BAE /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 0E0BD27227B2EA2C00583AC5 /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; 0E0BD27527B2EB2200583AC5 /* DonateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DonateView.swift; sourceTree = ""; }; @@ -213,6 +290,8 @@ 0E0C072C236087C800155AAC /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; 0E12BC8E27F62C8500B2F912 /* Validators.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Validators.swift; sourceTree = ""; }; 0E1C0A52238FFF97009FC087 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; + 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderProfileItem.swift; sourceTree = ""; }; + 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderProfileItem+ViewModel.swift"; sourceTree = ""; }; 0E23B4A12298559800304C30 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = ""; }; 0E293850285A70AC002A6E0E /* AppPreference.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppPreference.swift; sourceTree = ""; }; 0E293856285A73BC002A6E0E /* AppContext+Shared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppContext+Shared.swift"; sourceTree = ""; }; @@ -236,6 +315,8 @@ 0E3B7FD927E51A0200C66F13 /* ProfileView+Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Provider.swift"; sourceTree = ""; }; 0E3CD47E280DA14B007075C0 /* AddProfileMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProfileMenu.swift; sourceTree = ""; }; 0E3CD482280DAE92007075C0 /* ProfileView+MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+MainMenu.swift"; sourceTree = ""; }; + 0E3FC6842867A3BA009B851C /* Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Bridging-Header.h"; sourceTree = ""; }; + 0E3FC6852867A3F9009B851C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PassepartoutLauncher.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0E41BD99286711C3006346B4 /* PassepartoutLauncherApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PassepartoutLauncherApp.swift; sourceTree = ""; }; 0E41BDA2286711C6006346B4 /* Launcher.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Launcher.entitlements; sourceTree = ""; }; @@ -251,6 +332,19 @@ 0E5349BD27C16A4500C71BB3 /* StyledPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StyledPicker.swift; sourceTree = ""; }; 0E5349C527C176C200C71BB3 /* EndpointView+OpenVPN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EndpointView+OpenVPN.swift"; sourceTree = ""; }; 0E5349C727C176D100C71BB3 /* EndpointView+WireGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "EndpointView+WireGuard.swift"; sourceTree = ""; }; + 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassepartoutMac.swift; sourceTree = ""; }; + 0E5467F22867A54600F74D1C /* MacBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBundle.swift; sourceTree = ""; }; + 0E5467F62867A57000F74D1C /* MacBridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBridge.swift; sourceTree = ""; }; + 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacBundleDelegate.swift; sourceTree = ""; }; + 0E5467FC2867AC4900F74D1C /* ProcessTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessTransformer.h; sourceTree = ""; }; + 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProcessTransformer.m; sourceTree = ""; }; + 0E5467FF2867AC9900F74D1C /* MacUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacUtils.swift; sourceTree = ""; }; + 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultMacUtils.swift; sourceTree = ""; }; + 0E5468052867AEC500F74D1C /* MacMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MacMenu.swift; sourceTree = ""; }; + 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultMacMenu.swift; sourceTree = ""; }; + 0E54680D286B676E00F74D1C /* TextItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextItem.swift; sourceTree = ""; }; + 0E54680F286BAF3100F74D1C /* Item.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Item.swift; sourceTree = ""; }; + 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparatorItem.swift; sourceTree = ""; }; 0E5683B827C2825D00EAF1CD /* DiagnosticsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiagnosticsView.swift; sourceTree = ""; }; 0E57F63820C83FC5008323CF /* Passepartout.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Passepartout.app; sourceTree = BUILT_PRODUCTS_DIR; }; 0E57F64720C83FC7008323CF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -275,6 +369,25 @@ 0E92D7C527F103300033CB7B /* ProfileView+Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Configuration.swift"; sourceTree = ""; }; 0E92D7C827F1042A0033CB7B /* ProfileView+Extra.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Extra.swift"; sourceTree = ""; }; 0E92D7F327F104B80033CB7B /* ProfileView+Diagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProfileView+Diagnostics.swift"; sourceTree = ""; }; + 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TextItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPNItemGroup.swift; sourceTree = ""; }; + 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VPNItemGroup+ViewModel.swift"; sourceTree = ""; }; + 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileItemGroup.swift; sourceTree = ""; }; + 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostProfileItem.swift; sourceTree = ""; }; + 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HostProfileItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PassepartoutMenu.swift; sourceTree = ""; }; + 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StaticSystemMenu.swift; sourceTree = ""; }; + 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisibilityItem.swift; sourceTree = ""; }; + 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VisibilityItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightProfileManager.swift; sourceTree = ""; }; + 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightProfileManager.swift; sourceTree = ""; }; + 0E96D30128720067005EFBCF /* LightVPNManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LightVPNManager.swift; sourceTree = ""; }; + 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultLightVPNManager.swift; sourceTree = ""; }; + 0E96D30628720AA1005EFBCF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchOnLoginItem.swift; sourceTree = ""; }; + 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LaunchOnLoginItem+ViewModel.swift"; sourceTree = ""; }; + 0E96D31028721855005EFBCF /* Constants+Mac.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Constants+Mac.swift"; sourceTree = ""; }; + 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ObservableProcessTransformer.swift; sourceTree = ""; }; 0E9AA977259F756A003FAFF1 /* PacketTunnelProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PacketTunnelProvider.swift; sourceTree = ""; }; 0E9C232F27F47032007D5FC7 /* IntentsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IntentsManager.swift; sourceTree = ""; }; 0E9C233227F47E95007D5FC7 /* IntentDispatcher+Activities.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "IntentDispatcher+Activities.swift"; sourceTree = ""; }; @@ -292,6 +405,7 @@ 0E9E5AED27B44CF1008C95DA /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 0E9E5AEE27B44CF1008C95DA /* pt */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt; path = pt.lproj/Localizable.strings; sourceTree = ""; }; 0E9ED48027FD9BAE003B2316 /* CopySavingButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CopySavingButton.swift; sourceTree = ""; }; + 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Flags.xcassets; sourceTree = ""; }; 0EA591122733DD4E0096F796 /* IntentDispatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IntentDispatcher.swift; sourceTree = ""; }; 0EA591152733DDDA0096F796 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.intentdefinition; name = Base; path = Base.lproj/Intents.intentdefinition; sourceTree = ""; }; 0EA591182733DDF60096F796 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Intents.strings; sourceTree = ""; }; @@ -306,6 +420,7 @@ 0EA5912A2733DDFC0096F796 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Intents.strings; sourceTree = ""; }; 0EA5912C2733DDFC0096F796 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Intents.strings; sourceTree = ""; }; 0EA5912E2733DDFD0096F796 /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/Intents.strings; sourceTree = ""; }; + 0EA9030A287045F70087BC73 /* SystemMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemMenu.swift; sourceTree = ""; }; 0EB17EA127D2263700D473B5 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 0EB17EA327D2263700D473B5 /* LocalProduct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalProduct.swift; sourceTree = ""; }; 0EB17EA527D2263700D473B5 /* Constants+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Constants+App.swift"; sourceTree = ""; }; @@ -330,6 +445,8 @@ 0EBE2FD72360F89600F0D5AB /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; 0EBE2FD82360F89600F0D5AB /* sv */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sv; path = sv.lproj/InfoPlist.strings; sourceTree = ""; }; 0EBE880E281B18DE0090D9E6 /* ProfileRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileRow.swift; sourceTree = ""; }; + 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PassepartoutMac.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 0ECB78E1285F53ED00B0E460 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; 0ECB78EA2861D1F300B0E460 /* PassepartoutLibrary */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = PassepartoutLibrary; sourceTree = ""; }; 0ECF71ED27B6A99300CDB528 /* AccountView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountView.swift; sourceTree = ""; }; 0ED1D6DB27DBA41700983466 /* DiagnosticsView+OpenVPN.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DiagnosticsView+OpenVPN.swift"; sourceTree = ""; }; @@ -362,6 +479,11 @@ 0EF2212E27E66F60001D0BD7 /* AddProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProfileView.swift; sourceTree = ""; }; 0EF2213027E674BD001D0BD7 /* AddProviderViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddProviderViewModel.swift; sourceTree = ""; }; 0EF8C5A728213C510053CE89 /* OrganizerView+Profiles.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "OrganizerView+Profiles.swift"; sourceTree = ""; }; + A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderServerItem.swift; sourceTree = ""; }; + A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderServerItem+ViewModel.swift"; sourceTree = ""; }; + A3A7CC4928790BD900172D7D /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = ""; }; + A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProviderLocationItem.swift; sourceTree = ""; }; + A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ProviderLocationItem+ViewModel.swift"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -382,6 +504,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0ECB78D7285F52F700B0E460 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0ED2B34327D3C77800FD8EA9 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -543,6 +672,77 @@ path = Extensions; sourceTree = ""; }; + 0E5467F12867A52B00F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D2FA2871D93B005EFBCF /* Models */, + 0E5467F92867AA0A00F74D1C /* MacBundleDelegate.swift */, + 0E5467F22867A54600F74D1C /* MacBundle.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E5467F52867A55F00F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D2F72871D868005EFBCF /* Models */, + 0E5467F62867A57000F74D1C /* MacBridge.swift */, + 0E5468052867AEC500F74D1C /* MacMenu.swift */, + 0E5467FF2867AC9900F74D1C /* MacUtils.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E5467FB2867AC4900F74D1C /* Reusable */ = { + isa = PBXGroup; + children = ( + 0E54680F286BAF3100F74D1C /* Item.swift */, + 0E0838F12872C5FB00A34EC0 /* ItemGroup.swift */, + 0E96D31328721FC3005EFBCF /* ObservableProcessTransformer.swift */, + 0E54681E286CA53C00F74D1C /* SeparatorItem.swift */, + 0E96D2F12871C5CA005EFBCF /* StaticSystemMenu.swift */, + 0EA9030A287045F70087BC73 /* SystemMenu.swift */, + 0E54680D286B676E00F74D1C /* TextItem.swift */, + 0E96D2DD28704C3B005EFBCF /* TextItem+ViewModel.swift */, + 0E5467FC2867AC4900F74D1C /* ProcessTransformer.h */, + 0E5467FD2867AC4900F74D1C /* ProcessTransformer.m */, + ); + path = Reusable; + sourceTree = ""; + }; + 0E5468022867AD2100F74D1C /* Mac */ = { + isa = PBXGroup; + children = ( + 0E5468082867AEF800F74D1C /* DefaultMacMenu.swift */, + 0E5468032867AD3500F74D1C /* DefaultMacUtils.swift */, + ); + path = Mac; + sourceTree = ""; + }; + 0E54680C286B675F00F74D1C /* Menu */ = { + isa = PBXGroup; + children = ( + 0E96D2EB2871A0AD005EFBCF /* HostProfileItem.swift */, + 0E96D2ED2871B68C005EFBCF /* HostProfileItem+ViewModel.swift */, + 0E96D30C287212FE005EFBCF /* LaunchOnLoginItem.swift */, + 0E96D30E28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift */, + 0E96D2EF2871C563005EFBCF /* PassepartoutMenu.swift */, + 0E0838F72874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift */, + 0E96D2E528718EF3005EFBCF /* ProfileItemGroup.swift */, + A3A7CC55287D56E800172D7D /* ProviderLocationItem.swift */, + A3A7CC57287D576400172D7D /* ProviderLocationItem+ViewModel.swift */, + 0E1F5627287F0ECB00F8ADD7 /* ProviderProfileItem.swift */, + 0E1F5629287F0EEE00F8ADD7 /* ProviderProfileItem+ViewModel.swift */, + A3A7CC452878DC8300172D7D /* ProviderServerItem.swift */, + A3A7CC472878DC9F00172D7D /* ProviderServerItem+ViewModel.swift */, + 0E96D2F32871CDAD005EFBCF /* VisibilityItem.swift */, + 0E96D2F52871D1FE005EFBCF /* VisibilityItem+ViewModel.swift */, + 0E96D2DF28718E44005EFBCF /* VPNItemGroup.swift */, + 0E96D2E128718E78005EFBCF /* VPNItemGroup+ViewModel.swift */, + ); + path = Menu; + sourceTree = ""; + }; 0E57F62F20C83FC5008323CF = { isa = PBXGroup; children = ( @@ -561,6 +761,7 @@ 0EDE8DBF20C86910004C739C /* PassepartoutOpenVPNTunnel.appex */, 0ED2B34A27D3C77800FD8EA9 /* PassepartoutWireGuardTunnel.appex */, 0E41BD97286711C3006346B4 /* PassepartoutLauncher.app */, + 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */, ); name = Products; sourceTree = ""; @@ -575,12 +776,42 @@ path = InApp; sourceTree = ""; }; + 0E96D2F72871D868005EFBCF /* Models */ = { + isa = PBXGroup; + children = ( + 0E96D2F82871D874005EFBCF /* LightProfileManager.swift */, + 0E0838F92877325A00A34EC0 /* LightProviderManager.swift */, + 0E96D30128720067005EFBCF /* LightVPNManager.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0E96D2FA2871D93B005EFBCF /* Models */ = { + isa = PBXGroup; + children = ( + 0E96D2FB2871D94E005EFBCF /* DefaultLightProfileManager.swift */, + 0E0838FC2877334300A34EC0 /* DefaultLightProviderManager.swift */, + 0E96D3042872010A005EFBCF /* DefaultLightVPNManager.swift */, + ); + path = Models; + sourceTree = ""; + }; + 0E96D3122872185E005EFBCF /* Constants */ = { + isa = PBXGroup; + children = ( + 0E96D31028721855005EFBCF /* Constants+Mac.swift */, + A3A7CC4928790BD900172D7D /* Theme.swift */, + ); + path = Constants; + sourceTree = ""; + }; 0E9AA982259F7674003FAFF1 /* Passepartout */ = { isa = PBXGroup; children = ( 0E9AA983259F76C5003FAFF1 /* App */, 0ECB78D1285F4F4000B0E460 /* AppShared */, 0E41BD98286711C3006346B4 /* Launcher */, + 0ECB78DE285F536B00B0E460 /* Mac */, 0EDE8DC020C86910004C739C /* Tunnel */, 0EB17EA127D2263700D473B5 /* Constants.swift */, ); @@ -595,6 +826,7 @@ 0E49F6C927DB398100385834 /* Extensions */, 0E92781227E7CD530057BB81 /* InApp */, 0EA591112733DD4E0096F796 /* Intents */, + 0E5467F12867A52B00F74D1C /* Mac */, 0E2C171C27CB6307007E8488 /* Reusable */, 0E35C0AE280EF8A80071FA35 /* Views */, 0E6059CA27FCC5DE003F4063 /* Assets.xcassets */, @@ -605,6 +837,7 @@ 0E09E35C2834172800BE1BAE /* Credits.rtf */, 0E57F64720C83FC7008323CF /* Info.plist */, 0E0C072B236087A100155AAC /* InfoPlist.strings */, + 0E3FC6852867A3F9009B851C /* AppDelegate.swift */, 0E2A8D4727ADF87F00207D04 /* PassepartoutApp.swift */, ); path = App; @@ -627,6 +860,7 @@ 0ECB78D3285F4F9600B0E460 /* Constants */, 0E293859285A7489002A6E0E /* Context */, 0E34A2B827CAA8EA00C73B67 /* L10n */, + 0E5467F52867A55F00F74D1C /* Mac */, 0E9E5AE227B44CF1008C95DA /* Localizable.strings */, ); path = AppShared; @@ -651,6 +885,22 @@ path = Constants; sourceTree = ""; }; + 0ECB78DE285F536B00B0E460 /* Mac */ = { + isa = PBXGroup; + children = ( + 0E96D3122872185E005EFBCF /* Constants */, + 0E5468022867AD2100F74D1C /* Mac */, + 0E54680C286B675F00F74D1C /* Menu */, + 0E5467FB2867AC4900F74D1C /* Reusable */, + 0E96D30628720AA1005EFBCF /* Assets.xcassets */, + 0EA1D84628805EAE00F3CA48 /* Flags.xcassets */, + 0ECB78E1285F53ED00B0E460 /* Info.plist */, + 0E5467EE2867A49B00F74D1C /* PassepartoutMac.swift */, + 0E3FC6842867A3BA009B851C /* Bridging-Header.h */, + ); + path = Mac; + sourceTree = ""; + }; 0ED2B33C27D3C52900FD8EA9 /* OpenVPN */ = { isa = PBXGroup; children = ( @@ -676,14 +926,6 @@ path = Constants; sourceTree = ""; }; - 0ED7D630286733A1009F2F8F /* Constants */ = { - isa = PBXGroup; - children = ( - 0ED7D631286733AF009F2F8F /* Constants+Launcher.swift */, - ); - path = Constants; - sourceTree = ""; - }; 0EDE8DC020C86910004C739C /* Tunnel */ = { isa = PBXGroup; children = ( @@ -728,7 +970,7 @@ ); name = WireGuardGo; passBuildSettingsInEnvironment = 1; - productName = "PassepartoutWireGuard-iOS"; + productName = PassepartoutWireGuard; }; /* End PBXLegacyTarget section */ @@ -759,12 +1001,14 @@ 0E57F63520C83FC5008323CF /* Frameworks */, 0E57F63620C83FC5008323CF /* Resources */, 0E41BDA828671339006346B4 /* Embed Launcher */, + 0E3152B7223F9EF500F61841 /* Embed Plugins */, 0EB2B14B2733FB6F007705AB /* Embed App Extensions */, 0EBEF138274E4C7F00EAC689 /* Drop Extra Frameworks In Extensions */, ); buildRules = ( ); dependencies = ( + 0ECB78E7285F5CC400B0E460 /* PBXTargetDependency */, 0E41BDAB286713F6006346B4 /* PBXTargetDependency */, 0ECF71FC27B6DA6700CDB528 /* PBXTargetDependency */, 0EB2B14A2733FB6F007705AB /* PBXTargetDependency */, @@ -779,6 +1023,25 @@ productReference = 0E57F63820C83FC5008323CF /* Passepartout.app */; productType = "com.apple.product-type.application"; }; + 0ECB78D9285F52F700B0E460 /* PassepartoutMac */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0ECB78DD285F52F700B0E460 /* Build configuration list for PBXNativeTarget "PassepartoutMac" */; + buildPhases = ( + 0E5467EF2867A4B100F74D1C /* Sources */, + 0ECB78D7285F52F700B0E460 /* Frameworks */, + 0ECB78D8285F52F700B0E460 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PassepartoutMac; + packageProductDependencies = ( + ); + productName = PassepartoutMac; + productReference = 0ECB78DA285F52F700B0E460 /* PassepartoutMac.bundle */; + productType = "com.apple.product-type.bundle"; + }; 0ED2B33E27D3C77800FD8EA9 /* WireGuardTunnel */ = { isa = PBXNativeTarget; buildConfigurationList = 0ED2B34727D3C77800FD8EA9 /* Build configuration list for PBXNativeTarget "WireGuardTunnel" */; @@ -796,7 +1059,7 @@ packageProductDependencies = ( 0ED2B36627D3C9A300FD8EA9 /* WireGuardAppExtension */, ); - productName = "Passepartout-iOS-Tunnel"; + productName = PassepartoutWireGuardTunnel; productReference = 0ED2B34A27D3C77800FD8EA9 /* PassepartoutWireGuardTunnel.appex */; productType = "com.apple.product-type.app-extension"; }; @@ -816,7 +1079,7 @@ packageProductDependencies = ( 0ED2B33827D3C49800FD8EA9 /* OpenVPNAppExtension */, ); - productName = "Passepartout-iOS-Tunnel"; + productName = PassepartoutOpenVPNTunnel; productReference = 0EDE8DBF20C86910004C739C /* PassepartoutOpenVPNTunnel.appex */; productType = "com.apple.product-type.app-extension"; }; @@ -851,6 +1114,10 @@ }; }; }; + 0ECB78D9285F52F700B0E460 = { + CreatedOnToolsVersion = 13.4; + LastSwiftMigration = 1340; + }; 0ECF71F327B6D9CD00CDB528 = { CreatedOnToolsVersion = 13.2; }; @@ -896,6 +1163,7 @@ projectRoot = ""; targets = ( 0E57F63720C83FC5008323CF /* Passepartout */, + 0ECB78D9285F52F700B0E460 /* PassepartoutMac */, 0E41BD96286711C3006346B4 /* PassepartoutLauncher */, 0EDE8DBE20C86910004C739C /* OpenVPNTunnel */, 0ECF71F327B6D9CD00CDB528 /* WireGuardGo */, @@ -926,6 +1194,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0ECB78D8285F52F700B0E460 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0E96D30B28720ED9005EFBCF /* Assets.xcassets in Resources */, + 0EA1D84728805EAE00F3CA48 /* Flags.xcassets in Resources */, + 0E96D2FE2871F688005EFBCF /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0ED2B34627D3C77800FD8EA9 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -994,6 +1272,52 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 0E5467EF2867A4B100F74D1C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A3A7CC462878DC8300172D7D /* ProviderServerItem.swift in Sources */, + 0E96D31128721855005EFBCF /* Constants+Mac.swift in Sources */, + 0E96D3002871F6C8005EFBCF /* Constants.swift in Sources */, + 0E96D2E228718E78005EFBCF /* VPNItemGroup+ViewModel.swift in Sources */, + 0E96D2F02871C563005EFBCF /* PassepartoutMenu.swift in Sources */, + 0E96D2E028718E44005EFBCF /* VPNItemGroup.swift in Sources */, + 0E96D2F62871D1FE005EFBCF /* VisibilityItem+ViewModel.swift in Sources */, + 0E96D30F28721333005EFBCF /* LaunchOnLoginItem+ViewModel.swift in Sources */, + 0E5467F82867A57000F74D1C /* MacBridge.swift in Sources */, + 0E5468042867AD3500F74D1C /* DefaultMacUtils.swift in Sources */, + 0E5468092867AEF800F74D1C /* DefaultMacMenu.swift in Sources */, + 0E0838FB2877325A00A34EC0 /* LightProviderManager.swift in Sources */, + 0E1F5628287F0ECB00F8ADD7 /* ProviderProfileItem.swift in Sources */, + A3A7CC482878DC9F00172D7D /* ProviderServerItem+ViewModel.swift in Sources */, + 0E5467FE2867AC4900F74D1C /* ProcessTransformer.m in Sources */, + 0EA9030B287045F70087BC73 /* SystemMenu.swift in Sources */, + 0E96D2DE28704C3B005EFBCF /* TextItem+ViewModel.swift in Sources */, + 0E0838F22872C5FB00A34EC0 /* ItemGroup.swift in Sources */, + A3A7CC4A28790BD900172D7D /* Theme.swift in Sources */, + 0E0838F82874147F00A34EC0 /* PassepartoutMenu+StatusButton.swift in Sources */, + 0E5468012867AC9A00F74D1C /* MacUtils.swift in Sources */, + 0E546810286BAF3100F74D1C /* Item.swift in Sources */, + A3A7CC56287D56E800172D7D /* ProviderLocationItem.swift in Sources */, + 0E96D30328720067005EFBCF /* LightVPNManager.swift in Sources */, + 0E96D2F42871CDAD005EFBCF /* VisibilityItem.swift in Sources */, + 0E1F562B287F0EF100F8ADD7 /* ProviderProfileItem+ViewModel.swift in Sources */, + 0E5468072867AEC500F74D1C /* MacMenu.swift in Sources */, + 0E96D2EC2871A0AD005EFBCF /* HostProfileItem.swift in Sources */, + 0E96D2F22871C5CA005EFBCF /* StaticSystemMenu.swift in Sources */, + A3A7CC58287D576400172D7D /* ProviderLocationItem+ViewModel.swift in Sources */, + 0E5467F02867A4C300F74D1C /* PassepartoutMac.swift in Sources */, + 0E96D30D287212FE005EFBCF /* LaunchOnLoginItem.swift in Sources */, + 0E96D2F92871D874005EFBCF /* LightProfileManager.swift in Sources */, + 0E54681F286CA53C00F74D1C /* SeparatorItem.swift in Sources */, + 0E96D2E628718EF3005EFBCF /* ProfileItemGroup.swift in Sources */, + 0E96D31428721FC3005EFBCF /* ObservableProcessTransformer.swift in Sources */, + 0E96D2FF2871F68B005EFBCF /* SwiftGen+Strings.swift in Sources */, + 0E546814286BAF3D00F74D1C /* TextItem.swift in Sources */, + 0E96D2EE2871B68C005EFBCF /* HostProfileItem+ViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 0E57F63420C83FC5008323CF /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1016,6 +1340,7 @@ 0EBC076027EC587900208AD9 /* SwiftGen+Strings.swift in Sources */, 0E0392772818732D00827C10 /* BuildProducts.swift in Sources */, 0E5683B927C2825D00EAF1CD /* DiagnosticsView.swift in Sources */, + 0E3FC6862867A3F9009B851C /* AppDelegate.swift in Sources */, 0E71ACFD27C1321A00F85C4B /* ActivityView.swift in Sources */, 0E44689627B051C300A14CE4 /* ProfileView.swift in Sources */, 0EDE02C227F61C79000FBE3C /* EditableTextList.swift in Sources */, @@ -1033,26 +1358,33 @@ 0EB17EAA27D226C900D473B5 /* Constants+App.swift in Sources */, 0E3B7FD627E5173A00C66F13 /* ProfileView+VPN.swift in Sources */, 0ED89C1E27DE3F8D008B36D6 /* IntentAddView.swift in Sources */, + 0E5468002867AC9A00F74D1C /* MacUtils.swift in Sources */, + 0E96D3052872010A005EFBCF /* DefaultLightVPNManager.swift in Sources */, 0EBE880F281B18DE0090D9E6 /* ProfileRow.swift in Sources */, 0ED30DCF27EA1EF80057D8A3 /* PaywallView+Beta.swift in Sources */, 0ECF71EE27B6A99300CDB528 /* AccountView.swift in Sources */, 0E71ACF727C107CA00F85C4B /* DebugLogView.swift in Sources */, 0EF0FAF927DD212C007EB181 /* IntentActivity.swift in Sources */, 0EBC075B27EC4FFF00208AD9 /* ReportIssueView.swift in Sources */, + 0E96D30228720067005EFBCF /* LightVPNManager.swift in Sources */, 0ED89C1727DE0E05008B36D6 /* IntentEditView.swift in Sources */, 0E70589B28377DC40075D1D2 /* VPNStatusText.swift in Sources */, 0E71ACE927C1055300F85C4B /* NetworkSettingsView.swift in Sources */, 0EB34BCA27C6A70200B126DA /* OnDemandView.swift in Sources */, + 0E0838FA2877325A00A34EC0 /* LightProviderManager.swift in Sources */, 0ED7D62F2867328A009F2F8F /* Constants+Library.swift in Sources */, + 0E5467FA2867AA0A00F74D1C /* MacBundleDelegate.swift in Sources */, 0E0BD27327B2EA2C00583AC5 /* MainView.swift in Sources */, 0EB17EBA27D2560300D473B5 /* PassepartoutProviders+Extensions.swift in Sources */, 0E3B7FDA27E51A0200C66F13 /* ProfileView+Provider.swift in Sources */, + 0E5468062867AEC500F74D1C /* MacMenu.swift in Sources */, 0E71ACE327C0F2E400F85C4B /* Providers+L10n.swift in Sources */, 0E71ACF127C1073800F85C4B /* ProviderLocationView.swift in Sources */, 0E2A8D4F27B04BBA00207D04 /* OrganizerView.swift in Sources */, 0E49F6BB27D7638300385834 /* EndpointAdvancedView+OpenVPN.swift in Sources */, 0E71ACEF27C106B500F85C4B /* ProviderPresetView.swift in Sources */, 0EF2212F27E66F60001D0BD7 /* AddProfileView.swift in Sources */, + 0E96D2FC2871D94E005EFBCF /* DefaultLightProfileManager.swift in Sources */, 0EF0FAF627DD0211007EB181 /* PaywallView.swift in Sources */, 0E293851285A70AC002A6E0E /* AppPreference.swift in Sources */, 0E5349BE27C16A4500C71BB3 /* StyledPicker.swift in Sources */, @@ -1061,12 +1393,15 @@ 0E021D9C284E68580077EF5D /* CoreContext.swift in Sources */, 0E34A2B627CAA8CC00C73B67 /* Core+L10n.swift in Sources */, 0E7577DF2817E22C00081CBE /* VPNToggle.swift in Sources */, + 0E5467F32867A54600F74D1C /* MacBundle.swift in Sources */, 0E6059CF27FCC618003F4063 /* SwiftGen+Assets.swift in Sources */, 0E2A8D4927ADF87F00207D04 /* PassepartoutApp.swift in Sources */, 0EBC075527EBC83800208AD9 /* MailComposerView.swift in Sources */, 0EF0FAF727DD159C007EB181 /* IntentDispatcher.swift in Sources */, 0E12BC8F27F62C8600B2F912 /* Validators.swift in Sources */, + 0E0838FD2877334300A34EC0 /* DefaultLightProviderManager.swift in Sources */, 0E039279281890B100827C10 /* AddHostView.swift in Sources */, + 0E5467F72867A57000F74D1C /* MacBridge.swift in Sources */, 0E9ED48127FD9BAE003B2316 /* CopySavingButton.swift in Sources */, 0EE11CD2280D8317003BE431 /* InfoMenu.swift in Sources */, 0E44689C27B11B5300A14CE4 /* AboutView.swift in Sources */, @@ -1087,6 +1422,7 @@ 0E065F112813269500062CAF /* WelcomeView.swift in Sources */, 0E2DE71F27DCD0290067B9E1 /* TunnelKit+L10n.swift in Sources */, 0E49F6BF27D764AF00385834 /* EndpointAdvancedView.swift in Sources */, + 0E96D2FD2871D964005EFBCF /* LightProfileManager.swift in Sources */, 0E0BD27627B2EB2200583AC5 /* DonateView.swift in Sources */, 0E2C171B27CB5A3B007E8488 /* GenericCreditsView.swift in Sources */, 0ED30DD227EA1F650057D8A3 /* PaywallView+Purchase.swift in Sources */, @@ -1134,6 +1470,12 @@ target = 0EDE8DBE20C86910004C739C /* OpenVPNTunnel */; targetProxy = 0EB2B1492733FB6F007705AB /* PBXContainerItemProxy */; }; + 0ECB78E7285F5CC400B0E460 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + platformFilter = maccatalyst; + target = 0ECB78D9285F52F700B0E460 /* PassepartoutMac */; + targetProxy = 0ECB78E6285F5CC400B0E460 /* PBXContainerItemProxy */; + }; 0ECF71FC27B6DA6700CDB528 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 0ECF71F327B6D9CD00CDB528 /* WireGuardGo */; @@ -1392,6 +1734,7 @@ 0E57F65620C83FC7008323CF /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1418,6 +1761,7 @@ 0E57F65720C83FC7008323CF /* Release */ = { isa = XCBuildConfiguration; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CLANG_ENABLE_MODULES = YES; @@ -1440,6 +1784,69 @@ }; name = Release; }; + 0ECB78DB285F52F700B0E460 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 3240; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = Passepartout/Mac/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_MAC_ID)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Passepartout/Mac/Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Debug; + }; + 0ECB78DC285F52F700B0E460 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_IDENTITY = "-"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 3240; + DEVELOPMENT_TEAM = ""; + INFOPLIST_FILE = Passepartout/Mac/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = "$(CFG_MAC_ID)"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Passepartout/Mac/Bridging-Header.h"; + SWIFT_VERSION = 5.0; + WRAPPER_EXTENSION = bundle; + }; + name = Release; + }; 0ECF71F527B6D9CD00CDB528 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1589,6 +1996,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 0ECB78DD285F52F700B0E460 /* Build configuration list for PBXNativeTarget "PassepartoutMac" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0ECB78DB285F52F700B0E460 /* Debug */, + 0ECB78DC285F52F700B0E460 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 0ECF71F427B6D9CD00CDB528 /* Build configuration list for PBXLegacyTarget "WireGuardGo" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme b/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme new file mode 100644 index 00000000..f99fac6c --- /dev/null +++ b/Passepartout.xcodeproj/xcshareddata/xcschemes/PassepartoutMac.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Passepartout/App/AppDelegate.swift b/Passepartout/App/AppDelegate.swift new file mode 100644 index 00000000..1237bcf9 --- /dev/null +++ b/Passepartout/App/AppDelegate.swift @@ -0,0 +1,39 @@ +// +// AppDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import UIKit + +class AppDelegate: NSObject, UIApplicationDelegate, ObservableObject { + private let mac = MacBundle.shared + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { + #if targetEnvironment(macCatalyst) + mac.configure() + mac.menu.install() + #endif + return true + } +} diff --git a/Passepartout/App/Constants/Constants+App.swift b/Passepartout/App/Constants/Constants+App.swift index f0249af2..b573e334 100644 --- a/Passepartout/App/Constants/Constants+App.swift +++ b/Passepartout/App/Constants/Constants+App.swift @@ -44,6 +44,10 @@ extension Constants { Bundle.main.isTestFlight }() } + + enum Plugins { + static let macBridgeName = "PassepartoutMac.bundle" + } enum InApp { static var appType: ProductManager.AppType { diff --git a/Passepartout/App/Context/AppPreference.swift b/Passepartout/App/Context/AppPreference.swift index 647c4bcf..6414d7bc 100644 --- a/Passepartout/App/Context/AppPreference.swift +++ b/Passepartout/App/Context/AppPreference.swift @@ -27,6 +27,8 @@ import Foundation import PassepartoutLibrary enum AppPreference: String, KeyStoreDomainLocation { + case launchesOnLogin // placeholder, hardcoded in PassepartoutMac + case isShowingFavorites case didHandleSubreddit diff --git a/Passepartout/App/Info.plist b/Passepartout/App/Info.plist index 325893cb..e2426b9c 100644 --- a/Passepartout/App/Info.plist +++ b/Passepartout/App/Info.plist @@ -61,6 +61,11 @@ UntrustCellularNetworkIntent UntrustCurrentNetworkIntent + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + UIBackgroundModes remote-notification diff --git a/Passepartout/App/Intents/IntentDispatcher+Activities.swift b/Passepartout/App/Intents/IntentDispatcher+Activities.swift index 940a65cc..246fd49f 100644 --- a/Passepartout/App/Intents/IntentDispatcher+Activities.swift +++ b/Passepartout/App/Intents/IntentDispatcher+Activities.swift @@ -43,7 +43,7 @@ extension IntentDispatcher { Task { do { - try await vpnManager.connectWithActiveProfile() + try await vpnManager.connectWithActiveProfile(toServer: nil) } catch { pp_log.error("Unable to connect with active profile: \(error)") } diff --git a/Passepartout/App/Mac/MacBundle.swift b/Passepartout/App/Mac/MacBundle.swift new file mode 100644 index 00000000..bcd81809 --- /dev/null +++ b/Passepartout/App/Mac/MacBundle.swift @@ -0,0 +1,56 @@ +// +// MacBundle.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +class MacBundle { + static let shared = MacBundle() + + private var bridge: MacBridge! + + private lazy var bridgeDelegate = MacBundleDelegate(bundle: self) + + func configure() { + guard let bundleURL = Bundle.main.builtInPlugInsURL?.appendingPathComponent(Constants.Plugins.macBridgeName) else { + fatalError("Unable to find Mac bundle in plugins") + } + guard let bundle = Bundle(url: bundleURL) else { + fatalError("Unable to build Mac bundle") + } + guard let bridgeClass = bundle.principalClass as? MacBridge.Type else { + fatalError("Unable to find principal class in Mac bundle") + } + bridge = bridgeClass.init() + bridge.menu.delegate = bridgeDelegate + } + + var utils: MacUtils { + bridge.utils + } + + var menu: MacMenu { + bridge.menu + } +} diff --git a/Passepartout/App/Mac/MacBundleDelegate.swift b/Passepartout/App/Mac/MacBundleDelegate.swift new file mode 100644 index 00000000..c3cd9953 --- /dev/null +++ b/Passepartout/App/Mac/MacBundleDelegate.swift @@ -0,0 +1,46 @@ +// +// MacBundleDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +class MacBundleDelegate: MacMenuDelegate { + private weak var bundle: MacBundle? + + var profileManager: LightProfileManager { + DefaultLightProfileManager() + } + + var providerManager: LightProviderManager { + DefaultLightProviderManager() + } + + var vpnManager: LightVPNManager { + DefaultLightVPNManager() + } + + init(bundle: MacBundle?) { + self.bundle = bundle + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift b/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift new file mode 100644 index 00000000..fede6a7c --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightProfileManager.swift @@ -0,0 +1,106 @@ +// +// DefaultLightProfileManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import PassepartoutLibrary +import Combine + +class DefaultLightProfile: LightProfile { + let id: UUID + + let name: String + + let vpnProtocol: String + + let isActive: Bool + + let providerName: String? + + let providerServer: LightProviderServer? + + init(_ header: Profile.Header, vpnProtocol: String, isActive: Bool, providerServer: LightProviderServer?) { + id = header.id + name = header.name + self.vpnProtocol = vpnProtocol + self.isActive = isActive + providerName = header.providerName + self.providerServer = providerServer + } +} + +class DefaultLightProfileManager: LightProfileManager { + private let profileManager = Impl.ProfileManager.shared + + private let providerManager = Impl.ProviderManager.shared + + private var subscriptions: Set = [] + + weak var delegate: LightProfileManagerDelegate? + + init() { + profileManager.didUpdateProfiles + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateProfiles() + }.store(in: &subscriptions) + } + + var hasProfiles: Bool { + profileManager.hasProfiles + } + + var profiles: [LightProfile] { + profileManager.profiles + .sorted { + $0.header < $1.header + }.map { + let server: ProviderServer? + if let serverId = $0.providerServerId() { + server = providerManager.server(withId: serverId) + } else { + server = nil + } + return DefaultLightProfile( + $0.header, + vpnProtocol: $0.currentVPNProtocol.rawValue, + isActive: profileManager.isActiveProfile($0.id), + providerServer: server.map(DefaultLightProviderServer.init) + ) + } + } + + var activeProfileId: UUID? { + profileManager.activeProfileId + } + + var activeProfileName: String? { + guard let header = profileManager.headers.first(where: { + $0.id == profileManager.activeProfileId + }) else { + return nil + } + return header.name + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift new file mode 100644 index 00000000..ddf49ff4 --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightProviderManager.swift @@ -0,0 +1,114 @@ +// +// DefaultLightProviderManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/7/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import Combine +import PassepartoutLibrary + +class DefaultLightProviderCategory: LightProviderCategory { + let name: String + + var locations: [LightProviderLocation] + + init(_ category: ProviderCategory) { + name = category.name + locations = category.locations + .sorted() + .map(DefaultLightProviderLocation.init) + } +} + +class DefaultLightProviderLocation: LightProviderLocation { + let description: String + + let id: String + + let countryCode: String + + let servers: [LightProviderServer] + + init(_ location: ProviderLocation) { + description = location.localizedCountry + id = location.id + countryCode = location.countryCode + servers = location.servers? + .sorted() + .map(DefaultLightProviderServer.init) ?? [] + } +} + +class DefaultLightProviderServer: LightProviderServer { + let description: String + + let categoryName: String + + let locationId: String + + let serverId: String + + init(_ server: ProviderServer) { + description = server.localizedDescription + categoryName = server.categoryName + locationId = server.locationId + serverId = server.id + } +} + +class DefaultLightProviderManager: LightProviderManager { + private let providerManager = Impl.ProviderManager.shared + + private var subscriptions: Set = [] + + weak var delegate: LightProviderManagerDelegate? + + init() { + providerManager.didUpdateProviders + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateProviders() + }.store(in: &subscriptions) + } + + func categories(_ name: String, vpnProtocol: String) -> [LightProviderCategory] { + guard let vpnProtocolType = VPNProtocolType(rawValue: vpnProtocol) else { + fatalError("Unrecognized VPN protocol: \(vpnProtocol)") + } + return providerManager.categories(name, vpnProtocol: vpnProtocolType) + .map(DefaultLightProviderCategory.init) + } + + @MainActor + func downloadIfNeeded(_ name: String, vpnProtocol: String) { + guard let vpnProtocolType = VPNProtocolType(rawValue: vpnProtocol) else { + fatalError("Unrecognized VPN protocol: \(vpnProtocol)") + } + guard !providerManager.isAvailable(name, vpnProtocol: vpnProtocolType) else { + return + } + Task { + try await providerManager.fetchProviderPublisher(withName: name, vpnProtocol: vpnProtocolType, priority: .remoteThenBundle).async() + } + } +} diff --git a/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift b/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift new file mode 100644 index 00000000..75d03db6 --- /dev/null +++ b/Passepartout/App/Mac/Models/DefaultLightVPNManager.swift @@ -0,0 +1,120 @@ +// +// DefaultLightVPNManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import PassepartoutLibrary +import Combine + +class DefaultLightVPNManager: LightVPNManager { + private let vpnManager = Impl.VPNManager.shared + + private var subscriptions: Set = [] + + var isEnabled: Bool { + vpnManager.currentState.isEnabled + } + + var vpnStatus: LightVPNStatus { + vpnManager.currentState.vpnStatus.asLightVPNStatus + } + + weak var delegate: LightVPNManagerDelegate? + + init() { + vpnManager.currentState.$isEnabled + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateState( + isEnabled: $0, + vpnStatus: self.vpnManager.currentState.vpnStatus.asLightVPNStatus + ) + }.store(in: &subscriptions) + + vpnManager.currentState.$vpnStatus + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { + self.delegate?.didUpdateState( + isEnabled: self.vpnManager.currentState.isEnabled, + vpnStatus: $0.asLightVPNStatus + ) + }.store(in: &subscriptions) + } + + @MainActor + func connect(with profileId: UUID) { + Task { + try? await vpnManager.connect(with: profileId) + } + } + + @MainActor + func connect(with profileId: UUID, to serverId: String) { + Task { + try? await vpnManager.connect(with: profileId, toServer: serverId) + } + } + + @MainActor + func toggle() { + Task { + if !isEnabled { + try? await vpnManager.connectWithActiveProfile(toServer: nil) + } else { + await vpnManager.disable() + } + } + } + + @MainActor + func reconnect() { + Task { + if isEnabled { + await vpnManager.disable() + try? await Task.sleep(nanoseconds: 2 * NSEC_PER_SEC) + } + try? await vpnManager.connectWithActiveProfile(toServer: nil) + } + } +} + +private extension VPNStatus { + var asLightVPNStatus: LightVPNStatus { + switch self { + case .connected: + return .connected + + case .connecting: + return .connecting + + case .disconnected: + return .disconnected + + case .disconnecting: + return .disconnecting + } + } +} diff --git a/Passepartout/App/PassepartoutApp.swift b/Passepartout/App/PassepartoutApp.swift index e1c01216..c3dcb27a 100644 --- a/Passepartout/App/PassepartoutApp.swift +++ b/Passepartout/App/PassepartoutApp.swift @@ -28,6 +28,10 @@ import PassepartoutLibrary @main struct PassepartoutApp: App { + @UIApplicationDelegateAdaptor(AppDelegate.self) private var appDelegate + + @Environment(\.scenePhase) private var scenePhase + @SceneBuilder var body: some Scene { WindowGroup { MainView() @@ -40,6 +44,18 @@ struct PassepartoutApp: App { .onIntentActivity(IntentDispatcher.trustCurrentNetwork) .onIntentActivity(IntentDispatcher.untrustCellularNetwork) .onIntentActivity(IntentDispatcher.untrustCurrentNetwork) + }.onChange(of: scenePhase, perform: onScenePhase) + } + + private func onScenePhase(_ scenePhase: ScenePhase) { + switch scenePhase { + case .background: + #if targetEnvironment(macCatalyst) + MacBundle.shared.utils.sendAppToBackground() + #endif + + default: + break } } } diff --git a/Passepartout/App/swiftgen.yml b/Passepartout/App/swiftgen.yml deleted file mode 100644 index 3bad04bc..00000000 --- a/Passepartout/App/swiftgen.yml +++ /dev/null @@ -1,8 +0,0 @@ -xcassets: - inputs: - - Assets.xcassets - - Flags.xcassets - - Providers.xcassets - outputs: - - templateName: swift4 - output: Constants/SwiftGen+Assets.swift diff --git a/Passepartout/AppShared/Constants/SwiftGen+Strings.swift b/Passepartout/AppShared/Constants/SwiftGen+Strings.swift index b9678f40..dcdcbe05 100644 --- a/Passepartout/AppShared/Constants/SwiftGen+Strings.swift +++ b/Passepartout/AppShared/Constants/SwiftGen+Strings.swift @@ -435,16 +435,22 @@ internal enum L10n { internal static let cancel = L10n.tr("Localizable", "global.strings.cancel") /// Configuration internal static let configuration = L10n.tr("Localizable", "global.strings.configuration") + /// Connect + internal static let connect = L10n.tr("Localizable", "global.strings.connect") /// Default internal static let `default` = L10n.tr("Localizable", "global.strings.default") /// Delete internal static let delete = L10n.tr("Localizable", "global.strings.delete") /// Disabled internal static let disabled = L10n.tr("Localizable", "global.strings.disabled") + /// Disconnect + internal static let disconnect = L10n.tr("Localizable", "global.strings.disconnect") /// Domain internal static let domain = L10n.tr("Localizable", "global.strings.domain") /// Domains internal static let domains = L10n.tr("Localizable", "global.strings.domains") + /// Download + internal static let download = L10n.tr("Localizable", "global.strings.download") /// Duplicate internal static let duplicate = L10n.tr("Localizable", "global.strings.duplicate") /// Enabled @@ -453,6 +459,8 @@ internal enum L10n { internal static let encryption = L10n.tr("Localizable", "global.strings.encryption") /// Endpoint internal static let endpoint = L10n.tr("Localizable", "global.strings.endpoint") + /// Hide + internal static let hide = L10n.tr("Localizable", "global.strings.hide") /// Interface internal static let interface = L10n.tr("Localizable", "global.strings.interface") /// Keep-alive @@ -493,6 +501,8 @@ internal enum L10n { internal static let save = L10n.tr("Localizable", "global.strings.save") /// Servers internal static let servers = L10n.tr("Localizable", "global.strings.servers") + /// Show + internal static let show = L10n.tr("Localizable", "global.strings.show") /// Translations internal static let translations = L10n.tr("Localizable", "global.strings.translations") /// Uninstall @@ -540,63 +550,11 @@ internal enum L10n { } } internal enum System { - internal enum ActiveProfile { - internal enum Items { - internal enum Customize { - /// Customize... - internal static let title = L10n.tr("Localizable", "menu.system.active_profile.items.customize.title") - } - } - internal enum Messages { - /// No account configured - internal static let missingCredentials = L10n.tr("Localizable", "menu.system.active_profile.messages.missing_credentials") - } - internal enum Title { - /// No active profile - internal static let `none` = L10n.tr("Localizable", "menu.system.active_profile.title.none") - } - } - internal enum Organizer { - /// Organizer - internal static let title = L10n.tr("Localizable", "menu.system.organizer.title") - } - internal enum Preferences { - /// Preferences - internal static let title = L10n.tr("Localizable", "menu.system.preferences.title") - } internal enum Quit { /// Quit %@ internal static func title(_ p1: Any) -> String { return L10n.tr("Localizable", "menu.system.quit.title", String(describing: p1)) } - internal enum Messages { - /// The VPN, if enabled, will still run in the background. Do you want to quit? - internal static let confirm = L10n.tr("Localizable", "menu.system.quit.messages.confirm") - } - } - internal enum ShareGeneric { - /// Invite a friend - internal static let caption = L10n.tr("Localizable", "menu.system.share_generic.caption") - } - internal enum ShareTwitter { - /// Tweet about it! - internal static let caption = L10n.tr("Localizable", "menu.system.share_twitter.caption") - } - internal enum Show { - /// Show - internal static let title = L10n.tr("Localizable", "menu.system.show.title") - } - internal enum Support { - /// Make a donation - internal static let donate = L10n.tr("Localizable", "menu.system.support.donate") - /// Join community - internal static let joinCommunity = L10n.tr("Localizable", "menu.system.support.join_community") - /// Write a review - internal static let writeReview = L10n.tr("Localizable", "menu.system.support.write_review") - } - internal enum SwitchProfile { - /// Active profile - internal static let title = L10n.tr("Localizable", "menu.system.switch_profile.title") } } } diff --git a/Passepartout/AppShared/Mac/MacBridge.swift b/Passepartout/AppShared/Mac/MacBridge.swift new file mode 100644 index 00000000..54fdf79a --- /dev/null +++ b/Passepartout/AppShared/Mac/MacBridge.swift @@ -0,0 +1,35 @@ +// +// MacBridge.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(MacBridge) +public protocol MacBridge: NSObjectProtocol { + init() + + var utils: MacUtils { get } + + var menu: MacMenu { get } +} diff --git a/Passepartout/AppShared/Mac/MacMenu.swift b/Passepartout/AppShared/Mac/MacMenu.swift new file mode 100644 index 00000000..ba97bf2b --- /dev/null +++ b/Passepartout/AppShared/Mac/MacMenu.swift @@ -0,0 +1,42 @@ +// +// MacMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc +public protocol MacMenu { + var delegate: MacMenuDelegate? { get set } + + func install() +} + +@objc +public protocol MacMenuDelegate { + var profileManager: LightProfileManager { get } + + var providerManager: LightProviderManager { get } + + var vpnManager: LightVPNManager { get } +} diff --git a/Passepartout/AppShared/Mac/MacUtils.swift b/Passepartout/AppShared/Mac/MacUtils.swift new file mode 100644 index 00000000..3858f5e7 --- /dev/null +++ b/Passepartout/AppShared/Mac/MacUtils.swift @@ -0,0 +1,41 @@ +// +// MacUtils.swift +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc +public protocol MacUtils { + var isForeground: Bool { get } + + func toggleForeground() + + func bringAppToForeground() + + func sendAppToBackground() +} + +@objc +public protocol MacUtilsDelegate { +} diff --git a/Passepartout/AppShared/Mac/Models/LightProfileManager.swift b/Passepartout/AppShared/Mac/Models/LightProfileManager.swift new file mode 100644 index 00000000..df0c26e7 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightProfileManager.swift @@ -0,0 +1,65 @@ +// +// LightProfileManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(LightProfile) +public protocol LightProfile { + var id: UUID { get } + + var name: String { get } + + var vpnProtocol: String { get } + + var isActive: Bool { get } + + var providerName: String? { get } + + var providerServer: LightProviderServer? { get } +} + +extension LightProfile { + public var isProvider: Bool { + providerName != nil + } +} + +@objc +public protocol LightProfileManager { + var hasProfiles: Bool { get } + + var profiles: [LightProfile] { get } + + var activeProfileId: UUID? { get } + + var activeProfileName: String? { get } + + var delegate: LightProfileManagerDelegate? { get set } +} + +@objc +public protocol LightProfileManagerDelegate { + func didUpdateProfiles() +} diff --git a/Passepartout/AppShared/Mac/Models/LightProviderManager.swift b/Passepartout/AppShared/Mac/Models/LightProviderManager.swift new file mode 100644 index 00000000..7889cbc4 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightProviderManager.swift @@ -0,0 +1,69 @@ +// +// DefaultLightProviderManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/7/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(LightProviderCategory) +public protocol LightProviderCategory { + var name: String { get } + + var locations: [LightProviderLocation] { get } +} + +@objc(LightProviderLocation) +public protocol LightProviderLocation { + var description: String { get } + + var id: String { get } + + var countryCode: String { get } + + var servers: [LightProviderServer] { get } +} + +@objc(LightProviderServer) +public protocol LightProviderServer { + var description: String { get } + + var categoryName: String { get } + + var locationId: String { get } + + var serverId: String { get } +} + +@objc +public protocol LightProviderManager { + var delegate: LightProviderManagerDelegate? { get set } + + func categories(_ name: String, vpnProtocol: String) -> [LightProviderCategory] + + func downloadIfNeeded(_ name: String, vpnProtocol: String) +} + +@objc +public protocol LightProviderManagerDelegate { + func didUpdateProviders() +} diff --git a/Passepartout/AppShared/Mac/Models/LightVPNManager.swift b/Passepartout/AppShared/Mac/Models/LightVPNManager.swift new file mode 100644 index 00000000..06635d48 --- /dev/null +++ b/Passepartout/AppShared/Mac/Models/LightVPNManager.swift @@ -0,0 +1,59 @@ +// +// LightVPNManager.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(LightVPNStatus) +public enum LightVPNStatus: Int { + case connecting + + case connected + + case disconnecting + + case disconnected +} + +@objc +public protocol LightVPNManager { + var isEnabled: Bool { get } + + var vpnStatus: LightVPNStatus { get } + + func connect(with profileId: UUID) + + func connect(with profileId: UUID, to serverId: String) + + func toggle() + + func reconnect() + + var delegate: LightVPNManagerDelegate? { get set } +} + +@objc +public protocol LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) +} diff --git a/Passepartout/AppShared/Menu/MenuBuilder.swift b/Passepartout/AppShared/Menu/MenuBuilder.swift new file mode 100644 index 00000000..5c4854b7 --- /dev/null +++ b/Passepartout/AppShared/Menu/MenuBuilder.swift @@ -0,0 +1,37 @@ +// +// MenuBuilder.swift +// Passepartout +// +// Created by Davide De Rosa on 6/24/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(MenuBuilder) +public protocol MenuBuilder: NSObjectProtocol { + weak var delegate: MenuDelegate? { get set } + + init() + + func sendAppToBackground() + + func buildMenu() +} diff --git a/Passepartout/AppShared/Menu/MenuDelegate.swift b/Passepartout/AppShared/Menu/MenuDelegate.swift new file mode 100644 index 00000000..47a9854b --- /dev/null +++ b/Passepartout/AppShared/Menu/MenuDelegate.swift @@ -0,0 +1,31 @@ +// +// MenuDelegate.swift +// Passepartout +// +// Created by Davide De Rosa on 6/24/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +@objc(MenuDelegate) +public protocol MenuDelegate { + func toggleForegroundClicked(isForeground: Bool) +} diff --git a/Passepartout/AppShared/en.lproj/Localizable.strings b/Passepartout/AppShared/en.lproj/Localizable.strings index 6bc39f4a..d2676b62 100644 --- a/Passepartout/AppShared/en.lproj/Localizable.strings +++ b/Passepartout/AppShared/en.lproj/Localizable.strings @@ -46,6 +46,11 @@ "global.strings.keepalive" = "Keep-alive"; "global.strings.advanced" = "Advanced"; "global.strings.translations" = "Translations"; +"global.strings.show" = "Show"; +"global.strings.hide" = "Hide"; +"global.strings.connect" = "Connect"; +"global.strings.disconnect" = "Disconnect"; +"global.strings.download" = "Download"; "global.messages.email_not_configured" = "No e-mail account is configured."; "global.messages.share" = "Passepartout is a user-friendly, open source OpenVPN / WireGuard client for iOS and macOS"; @@ -71,21 +76,20 @@ "menu.contextual.share_twitter" = "Tweet"; "menu.contextual.share_generic" = "Invite"; -"menu.system.show.title" = "Show"; -"menu.system.switch_profile.title" = "Active profile"; -"menu.system.active_profile.title.none" = "No active profile"; -"menu.system.active_profile.items.customize.title" = "Customize..."; -"menu.system.active_profile.messages.missing_credentials" = "No account configured"; -"menu.system.organizer.title" = "Organizer"; -"menu.system.preferences.title" = "Preferences"; -"menu.system.support.donate" = "Make a donation"; -"menu.system.support.join_community" = "Join community"; -"menu.system.support.write_review" = "Write a review"; +//"menu.system.switch_profile.title" = "Active profile"; +//"menu.system.active_profile.title.none" = "No active profile"; +//"menu.system.active_profile.items.customize.title" = "Customize..."; +//"menu.system.active_profile.messages.missing_credentials" = "No account configured"; +//"menu.system.organizer.title" = "Organizer"; +//"menu.system.preferences.title" = "Preferences"; +//"menu.system.support.donate" = "Make a donation"; +//"menu.system.support.join_community" = "Join community"; +//"menu.system.support.write_review" = "Write a review"; // "menu.system.support.translate" = "Offer to translate"; -"menu.system.share_twitter.caption" = "Tweet about it!"; -"menu.system.share_generic.caption" = "Invite a friend"; +//"menu.system.share_twitter.caption" = "Tweet about it!"; +//"menu.system.share_generic.caption" = "Invite a friend"; "menu.system.quit.title" = "Quit %@"; -"menu.system.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?"; +//"menu.system.quit.messages.confirm" = "The VPN, if enabled, will still run in the background. Do you want to quit?"; /* MARK: TunnelKit */ diff --git a/Passepartout/AppShared/swiftgen.yml b/Passepartout/AppShared/swiftgen.yml deleted file mode 100644 index 0c509dce..00000000 --- a/Passepartout/AppShared/swiftgen.yml +++ /dev/null @@ -1,6 +0,0 @@ -strings: - inputs: - - en.lproj/Localizable.strings - outputs: - - templateName: structured-swift4 - output: Constants/SwiftGen+Strings.swift diff --git a/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json new file mode 100644 index 00000000..97c88e5b --- /dev/null +++ b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusActive@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png b/Passepartout/Mac/Assets.xcassets/StatusActive.imageset/StatusActive@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a85f0d47c52d96e84b0766f2a132249df65d1687 GIT binary patch literal 798 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lf!3-obN;vz06id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZJST@Ck8!{qB>MHHep( zoC0JIMfCsw|MziE_XTjhZ--*bub+SBEcbMGUAAq;YwyOH z=AUMne*9}@ytKaI(Agi;udlmpVz|EJegB6Qa>un5X1~+gtEhDlXar-Dx4VmD=e-<1 zAcwQSBeIx*K~EWk87r3BmjMOYOFVsD*`IQ=3d@`N-!cORIfFoQq8~`g0gAVR6MdGM{3)HrfdJ}r}D}uF#YQKzSQsj z^p`6yJLtu0EYp~}zAo%_0GRJx{v+1^Q97#5JNMC9x#cD!C{XNHG{0 z7#Zps8tNLDh8S8}83B=rwt<0_fx+#EcA!v3Xvob^$xN%ntzp%kwpySD22WQ%mvv4F FO#s0vjxhiL literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json new file mode 100644 index 00000000..f71a4753 --- /dev/null +++ b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "StatusPending@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "template-rendering-intent" : "template" + } +} diff --git a/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png b/Passepartout/Mac/Assets.xcassets/StatusPending.imageset/StatusPending@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f6529f875d8955a04f3b782f047932203a47229e GIT binary patch literal 1230 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lf!3-obN;vz06id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=IjczVPIgK8sHP+`ug1`pc)`K ziUvst{Qv)-JtCN`ao`6!h%w3A-KDMPo^>pc!&%@FSZHu#d}(H+EX+3Pn~uWlGmJ%_Th6#MM!wKs>I!X~bjhgoX+cn#*gkAnG4U|z0f0es!G>n`=k$-t}knSEA;n8 zfK|QI@=LAn=H0W?eIx%u^2q({3=0Dx3D#px2OWji9DXc(P~puXvHvOtu72keuBodi z?sIiLAYl2OceC@tfC{+?11WLeh)o=k-}+zvI{8%T?Q`##mD&+g-}33kyq-|Ik#}NU zwEDE3uf1n=b?@A}$#Epk{mjv~@7~I<`1|nD#f@D4e&5d>`SRK9tI@nY0q0G3c^ zi@jfS^x3y}_x$w_9ootMH~hev{<=g(qxp*hYs4J8-9D-^>FllA&9X=7K1>B9w^9HA literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Bridging-Header.h b/Passepartout/Mac/Bridging-Header.h new file mode 100644 index 00000000..086796a2 --- /dev/null +++ b/Passepartout/Mac/Bridging-Header.h @@ -0,0 +1,31 @@ +// +// Bridging-Header.h +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +#ifndef BridgingHeader_h +#define BridgingHeader_h + +#import "ProcessTransformer.h" + +#endif /* BridgingHeader_h */ diff --git a/Passepartout/Mac/Constants/Constants+Mac.swift b/Passepartout/Mac/Constants/Constants+Mac.swift new file mode 100644 index 00000000..414b71c6 --- /dev/null +++ b/Passepartout/Mac/Constants/Constants+Mac.swift @@ -0,0 +1,36 @@ +// +// Constants+Mac.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension Constants { + enum Mac { + private static var bundle: Bundle { + Bundle(for: PassepartoutMac.self) + } + + static let appLauncherId: String = bundleConfig("launcher_id", in: bundle) + } +} diff --git a/Passepartout/Mac/Constants/Theme.swift b/Passepartout/Mac/Constants/Theme.swift new file mode 100644 index 00000000..7afc97d4 --- /dev/null +++ b/Passepartout/Mac/Constants/Theme.swift @@ -0,0 +1,82 @@ +// +// Theme.swift +// Passepartout +// +// Created by Davide De Rosa on 7/9/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +private var bundle: Bundle { + Bundle(for: PassepartoutMenu.StatusButton.self) +} + +extension LightVPNStatus { + var localizedDescription: String { + switch self { + case .connecting: + return L10n.Tunnelkit.Vpn.connecting + + case .connected: + return L10n.Tunnelkit.Vpn.active + + case .disconnecting: + return L10n.Tunnelkit.Vpn.disconnecting + + case .disconnected: + return L10n.Tunnelkit.Vpn.inactive + } + } +} + +extension LightVPNStatus { + var image: NSImage { + let resourceName: String + switch self { + case .connected, .disconnected: + resourceName = "StatusActive" + + case .connecting, .disconnecting: + resourceName = "StatusPending" + } + guard let image = bundle.image(forResource: resourceName) else { + fatalError("Resource not found: \(resourceName)") + } + return image + } + + var imageAlpha: Double { + switch self { + case .disconnected: + return 0.5 + + default: + return 1.0 + } + } +} + +extension LightProviderLocation { + var nsImage: NSImage? { + bundle.image(forResource: "flags/\(countryCode.lowercased())") + } +} diff --git a/Passepartout/Mac/Flags.xcassets/Contents.json b/Passepartout/Mac/Flags.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/Contents.json new file mode 100644 index 00000000..6e965652 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/Contents.json @@ -0,0 +1,9 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "provides-namespace" : true + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json new file mode 100644 index 00000000..291487a4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ad@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ad.imageset/ad@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8e579814b92360607bd7c5d7522e03507c3e8f84 GIT binary patch literal 560 zcmV-00?+-4P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0p&?VK~zYI?bSVNQ&AYe@&7sZ-I%u~7){!QrcgJFAV|9@D59f_AP#;E zKZ#qvfSW^bu;3sT9fVYZ5pf7K(xkCzn&jr@=DxTU$&?!jWXOMh&clzxfg>J2cx6|< z?O4oEaQJMNvCEEb@69wPgm@z(ZC+q2$aE{nbV~zK=Q-p!Ff}x=r9gK3^ko zwS^Q8)|JuXA>&DsFV&X>{+JuN2Axh3MU$kQAwPcIhfrbn&OU}QTr9-UdL-jbPNG~Q`|v$sr-bT`P$o9&#HQUTQ>{N= zJS0S-N{L7ZoK~I?rZV`NNuXPJnuQtD2}5J?kaFn*iVR@uD}&>Gw4KlNa|ya97C}L0 zJnWNCzl#is{6_3y0--3x!XA?W2;mV+1_a3on&}{gpg%}*jo*>>M!u1Y;W~~RGE&y? zbroM45I68W1ACmsbp?OU3sKibzY$&YF-@JL!6W3RK)4cW0?(WvTM{d2Vd{|`(IGdt z4~QMN@cb0rL6%;3169|ETMg2wGc>J7aig|)h_3mRH>&`go#&{J?xGr!t>Py#*>+^W y+>n1;OSRbBefvKvE?b&UZv~ld1(|MXAb$a1N}E7ZB{ymS0000|gW!U_%O?Xx)_J-( zhIn))+bA6VeB<9qaY;6%1DTw9Y@0Jelcr2!laLHE4!j@o>A(u-3kRW?v3ui+PyB7_ z;+;Wj^c6loEql7`^p&zBx7W{~xADUV&H{nejlI+7ySql5n{}SO$L)`Fg#7vT@v;7CHUDK*mWPfW{W|9%1M}g>|9N=+cOG0WA@R@n0^52i jlR)EF0wo4e%)n43X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0su)wK~zYI?Ug}m6HydK&&-?5WRjGaSQ0d`(O8u%#JCVwf)qDW3l+48 z;Kr>#z=9w`D~LZp+zBoe47d;!t8`I>NTCJ=DM1BmDQMHC#!NcxB$f(F6dY#DF7%fdmi%3r-aB>tPCfgsr5k7yG;fYCFo=5rR3#@lb80XFq$R38$7pYw7 zi3HQfG4{vsg@zC!1a^W+2>S5w}uhb>=Sd>sL8AJIn6(6X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x158OoK~zYI#g=VoQ&$+re>X2Rv$oQb4y)P5W<-i273tP);-U`3e%Khp zposHjbZ(VtH>Y1FjD6`8Utlj4+D*}Qt}t70;D#UkP~Dg>)fR_VT2hh5FLP^R)7+T! zCVBSZO4lS!@4eBn2M+h#=lst++h>qUP4A}whk%Mi!oeB0J2ni`XktYw%8}4z& zkoE&e>L&7Pjj`W0kYSKBZg*?~Hl7g_a^ zzD?PlOF#mXKqhv?0elUVPqBnULD=*O5dZi9YivZEPzHY?}I7Oesr>@M1zvjCVi zQ&?WDv9d;Q$#jbFm@!OkwVnNYoOEAva^bp@P(**c&8awVXwe+K^1Ig?@&p29laooC zopoz3a{cL-jepTXRE7TFr?a)VQV%oo_q^V)&Fk@~*%KV;6fNEBDNBqzF^FO<%F%9r z4g`SL<5BaLkGX1)BfoAzL7oUm^QHHgKRS?ieA+s;I(U|?{a-#d#KwVE-W)nLt;VpR z?(5mZvip|`hFBQB$){I7G}Pt1H93N`#`jm(^Ya&dBub{LGSkeBtJHrq^|`PN0#N+d zFq^yH#ogIy2_*FP`>4U&rnIKNM;>-{5p8KP4WS-8hT7h4T5svY=)vyYjQ92$>a<(8 z2=Cl!#o8K(Bod7H{iH`n^J`R<5x*aa#r``GfaK5+;f991goyAv526+Gg002ovPDHLkV1kuEyNUn+ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json new file mode 100644 index 00000000..830eac22 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ai@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ai.imageset/ai@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0730496fed6ac51919668f03824af6aa030f2c38 GIT binary patch literal 1160 zcmV;31b6$1P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1U*SaK~zYI&6a;mlyw}(U-xkGqc{XnK*EdAOBv&j^U_&38lZ-@SfGShQzos)Dpp_Z;W=d>Y8wJEu2P~<7nibetoS^e0;bgBAWE{LUM8{ktB&>ZQU9}s;QXnD;@ccb z)o|g$Hs;RtAD7)`8zSv}HQ&yu$LDkofjP%GAyd zOe7>KitCqlbKr|g_U-%WnZ~!?4Cg?EouLzZ@y^JgHfSLUYfn;N-wEL6EQlbA63xv9 zR;8D-BWMF%f)_1|USUhfeX6QHLZeYWPVORbK6?rK4SBe?HlXPh@gA9Xob#zn}mB)wy%Hg@lX*mYZ38c8VKB%J&ta1zq$8ntnaYxGgfIVD{|k?J)tiUcqq36Tlp{ zpfm5x?~9%cQYxq2)@YQiGi*kAVM*gl_l8`3pR5@JLo0)nTwsl}Uoc)}WVm54h`77E z5ErLHukYsS)w`%vp6GPF6cvepOe>!#fMF#kFDE#7IdonGV*@ej1U9Yr0}p@F($Xm^ z>H#L9p-IximU8nO=x+y;9_;-93=WQth6x9;Sgg>L3m$$jF9{6QQ1vlLA_jwX@<5En zUJzViW+ZgiLf{fG-Gt6k^!onE1F5R&gn$URunt-Zz+r{(RII*X)YXm7#tHvf^YYq= zPnv=?p%GCULT>&GyN`y>>YuUOWs?V@(@AVE_?lB;X%A0)nMoH@x0C~;FES}>K=Ech zk)~n*+!!S6lmuLIiL6R{F)RHfL@aeKWuAz=KcR> aL;D-wH=-C*U>VW?0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0+~rfK~zYI?Up@j6hRn(pV{5ny*uwVAKoPrV$?)CHU5JLf~2w#5y47K z1W7M~AQozqHUzW~gcL%+TER{f6(ovUXk(%g;zus`k(~QEW08<(lw{AGM8T(8X5O87 z_I-!hS4?;97zc5T&1Kx!WPxS=i>&6iL^LoH$3Kn#YAh*M(!fh|MFw*&p4Qx2nCEV- zM%obEZr_I1aP-p*p3?MZGMva}u@T&;R=C*G+E|eznJru?&5*`N zP>f@S+$LU!A)}QtHKiGJ-K5JWFU>^YlM;e2v0`k#%BwKoTyqP<B;*3NZc1y|gAOPS_t;SQ|C)65%(Mp+*OJ~Fuf<01F&xuJavfZ+n zj6&k2jY~>VQfhhrO&G37vl!E9CSE>yXTTG@4G!qDQX(l|53@ zVOgxNyh7sKO-B)*l_J(KkaL+;G0*&fx6xurx-ChsW0N;b0!jTh;)9R_kPeW^5&)?A${ay{S1 zR>P!Vnq14bae1yttTlb9G^cYey|$fLBvEN%;J)YaE(*E#wZ?wOVI*JRf$#AljsSS% zdyM1@%qz`>;w+93ypJVaS&7*w5feC=PT`0&?WV|gW!U_%O?XxN<3X0 zLp(a)UfIam;K1YdaCt<>wCz1}y)7D>Bf0MJE}C3%bt+fb#`8=&mH02!e{dG?U`ndl zxO9@tqT-Hoio5b2?c#p8#f9Y*ug8}E=|v&Nz0M_k7ekp}UaLHv{C~#3iQlD*l&v`v hH?}aWoRtaHB(H8co#%sVZUNAK22WQ%mvv4FO#tT_NnZc} literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json new file mode 100644 index 00000000..2b8a0d3c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ao@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ao.imageset/ao@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..51386a8d751f3fbbc3c149979f6e635b93d72b39 GIT binary patch literal 522 zcmV+l0`>igP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0l!H^K~zYI?bbg?)L|UQ@z)(n!sVd_R+gtr;1DI$5Y$k#Ib=gfLw^LL znyiLGY^bIPa&d49GHS^%Y6uMJ&(I%iD2$>%LXnt5*pjp;`ZTBscXW5&rDxy=KEv<% zKF`CO@8|dZ@e{Zm2nBX`)DqD$NV1kek~M#jV(h@yLW5jE7tWy?D+&eDh6YUH5zZ_& z$ZG5|-HCBDq7Um(x0oPfIEo`Prvh5A2bc2)Dav~1IBwz^Mw8YC{{hHhO1?3YZd0sO zq^4HUyIvE?wf#TDn%l)selYrJAhn*2)>8uArW^fNH`EKSo(LN%Q)}nX3LTe(cxn1O zGWb?j@5t*n)FilbgJVrZXHG>TG#y|~1wY4f>BXF~0vQ@+^G-ev(sr8boz!lm`5@m% z>3x_V#H`Xrv#(xQTQT>%eVg#0N9gYpdb)&DC-REqPc#{)rYz3;7d(H-mm#L6NL2Fq zD~T%Vez9c}18?)|M#g9!KjUdX?VTKIBpRXn9(V7vdoRNyv>fMRE33-$gUL8Gv#zcZ zR>o4-%gcldt-{rg+@qNnNG2B-FYx$gtBIUGXVdzRe~cDLO9dqI8&5_bO099QyZ`_I M07*qoM6N<$f_6>qPXGV_ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json new file mode 100644 index 00000000..0f99fc0a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "aq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/aq.imageset/aq@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f3ef9dba7a0854fe2fdf5c81e8d17d5b3e5b6b96 GIT binary patch literal 624 zcmV-$0+0QPP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0wqaAK~zYI?Uu`HQ$ZAmzxzmfFOMOQq^RlfB*@jh(7Y z(C-ok*)}!tZ+T*0GTgm#l*m+ycrwpWsDo2|J|XkLpobS9R+|R_m|H54&F=-wqR5hP8ihbYd&O^mt$c13`FADO zD9E+@^CWb`7D%R0qEfNy;!bt*)JM3`*+h;-y(r`_{KT*3O5A$9z@3*#d~O9TW8!tIg!_FQ+1JkKiSAAFEer0wT4p6{ z3i&tOebf083o8bNVuj^&k!Vaq&(`;php`lsAJ>F^ZFk?Fawrl(zY8s6;&#f+EfshZ zUne@9YRIQ)5VLG?{lPp?eK*QmREUUL`a`n|0sqQZv6cF3Kz;xLWT$x7O5m>m0000< KMNUMnLSTX)*(E^$ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json new file mode 100644 index 00000000..eec44f42 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ar@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ar.imageset/ar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c43d67f302fd9f85572ca8c9e83ea9420c72f2f5 GIT binary patch literal 391 zcmV;20eJq2P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0X#`WK~zYI?bJO_!ax9r@#pH5HZpiEIuIBLD$zkl5@#75{V0AbR!0X{ z7fl>Vh$uu!)KX$v-rAlk>3A{V(B}jE^SjIC#7%e5Md)j`nGjuTtAMo%NWKD+uYlx} zSLdqb?aHkpf;ef(y65dTICvmiOv%y&>3XQ+ l_iw)V0+O$QX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1O7=wK~zYIz1MF{8+9DV@%Qzvccm?~l>eo`hU^bx8LWttO$a2;80Wvl zkv&-A6O*~k`E2@d)0k+CK3I&2niyyHzz2JPCZv-%!{(BSb0X?sW+2X{tc|r@fsSjh zT`9k*)mh-4c=R zcd;OeIJY+A>3Ig%!w=%#`4Dv%MqCAj+-tE^>|8dR7bMr>>8S~3LX%uM^BLRw4q{y^ zB-i3d=ntZkzi_$#Bw8#?=;{wBf`KVo=|22A>FABsA^B|e^u!p~FPap2usH#etY|j=1Vwxt? z6GK#2SEH&b;c%EO+uAtNKaT%}O z34eha>c{J?!Rz(na5%8aGEW?N4ZYNd(|UVHW-?IXurFI9Z%A-rnE20cQ(2;;IK51M zdt&)Rij}A)AeH;*e(^Z<&8^EGkxbLf3(~N$li=u8>_z|~eu`iyg3~TCH#p^jFpd=j(VQ3n1RRtDBUK7S$SgrBPm1hO=r1)7QQt8jeupaA8YCNSr-Nd{(Ebx|ZhdS8$cp-I)()zHmVE z0ZZ&!VYN@i)i1%7VWw$v`;2U*SNWQT7 zTeFy^$@Q@>QDiF{+xM=x?wTR_!u~6HLka~eI3!nC@WROd3%M8A;(yKGS|#0Q>Is3W P00000NkvXXu0mjfw^160 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json new file mode 100644 index 00000000..9fd8cd25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "at@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png b/Passepartout/Mac/Flags.xcassets/flags/at.imageset/at@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4a37c7e45d1088a3b8e3b56edc72429a67ecb9b2 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx@;qG} zLp(a)UR%g}KtZJCp_9OZY-^sC>5&&y-ZZT^w9S9wtgdHb6&=6Te@rq?UnjA9OIc3W zPl?@ES^g-qfS_^txzesVvp8PYmMSh?*!e^1w2w1~8^<=DBeqN51iOePI^W>!7jyv% cxpAb#z1NYx|0-Mm9?)h6Pgg&ebxsLQ0OevtCIA2c literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json new file mode 100644 index 00000000..20b0f22c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "au@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png b/Passepartout/Mac/Flags.xcassets/flags/au.imageset/au@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f573888404d91100965d4b22b6fb113d7466bee5 GIT binary patch literal 1250 zcmV<81ReW{P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1eZxfK~zYIt(AXFlyw}(U(a*rad&xg9CCq*rzm2QqyrmFj)Dp02!m== z&Q^-9O>IhI%hb&|Wkb@QRj!EqRkk&6nN2eR!|5STnkZQ;1cGslA9oON2;TT{*B?$| zad#f4@Bg0X^ZtH5ukZKyJfE*{?Twtim=88hv#4jVdiB>-SGVv$(a|&bCAAl;B%%2B z3^8w=XS{OWT*8M`AeYP7HSjFooxY8qGKs&>OKNZ3wvE6u$EmE?PHyfB1VQk+N~e2* zvjs-B-8q6T<0Z78eo1XpufGrgi0|&NxV=T5f!)?iOV%n1wkJ|rx`nW?K(`AL;^$Ja zX*!YTz9Qn(DH`S_5Eqxv&6}1-0|B^D_7_PfN3bMk(~zFdvf*ZGYIc*96gg%T1cCfK zBPVobrVZJdUv`nAbIl|s9-y(&_DB!_LSbP^jlmEc^Wa6~bQ!a|8_=ewBdSzba&xgt z5|LM~AdHM4(`q3qnyRWMY__{&i6rS)Dk~fP9HvggV*IPPQcuj{ne>-jARr*sF#|w1k@8@o1C8uN7uuHne=%~|U0f3+& zH2}T6_i(vf?kpw|V8x23xOHnc#(+-h)6!^Pot~%oate8QspRKp5gx7s z#`Vagw&Ov1y@vAg_o=FCCMV|`PyGOZ(HP0Xg`pG|n*mIo+t?3jwQ8)^egpwDngHx} zhexm3T#wmYKlc1sLGIk?BrEF+0JjjLC=eTKpt`zc!k;EiwpeE760h;TzI*ib-E$jL zDC86ryh2FG#KGtjNLW}PX=#fH3DF=)*{D=g$jn@VTCMP9`IsDzVNy~K(a~Y|52U@l zkM-*lX>8nw!4OPm=f}jw85kTKniPmP`2?a?E9mI3qtPe<&}fu&cMl+wP5R6F4J z+1YW3qCkKD{RV7l`G+}kf?2up>Bk1*^BfTbfwr~-96frKl$0nE5(<1SqStF!ym%%x zHLY}Y-F0U%`Fyrot%@~kj<9p*84eyS^BF=A1orM-MQQ0)5)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0gFjQK~zYI?bFLEgi##E@$btSw;5*Y9k)qtO^sX%V@1kkM`FR6t+M40 zup|F~wQQ8KvS5KEWi$#A@lLre+>0?@%&~Gwnc2+DnT4m$>MVYre&;!wcXD$E=tE^B zGbxeob1Yh-C`5$xhYV~Y2_VkpdAu)IY9YB6DDbaQ9@td}NztJ7`3#N@aU0v%6VR2f z2Ds8BbvFUZ0y~r)ZN z3EJ#PT?arD0yDReN2`ON&CadJj5z{+Y~KG9P# z=W?XqD|Ot594=9lx1)RX1ErAtYmZZmERJshZlw~5KWV=2Kje2l00`^UAk*1lZ~y=R M07*qoM6N<$f;f`W!2kdN literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json new file mode 100644 index 00000000..363fe0c9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ax@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ax.imageset/ax@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f02843435cc6fddefc36facf6b9783e439f797db GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81Fmidi zIEHw1CZ}-3?doc5RGh-do{;|Y?1#lRjUe!_Y?ImH{@-(WKtSrWzTt+h|4AH?v(In% z)+VX<_6VcfF;kx@GaYOVUI~=I@PQ5KST#_{jJX~??<^%29kz(r_OOEIt-hZFnw}VHj zeM8N;zhAF8zGDguY+n0qDVxQIfY)yya85iFYdC$T4vk`5f6{nBk(2 W%j>7p=cfU~iNVv=&t;ucLK6Uc2a@mr literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json new file mode 100644 index 00000000..e7b6c564 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "az@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png b/Passepartout/Mac/Flags.xcassets/flags/az.imageset/az@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..95ef09b34c5ee558542f2bc5838c2fb51c90cfef GIT binary patch literal 490 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0iQ`kK~zYI?bJU=8&Mp<@$Wk>HRg|vrA-L9i4ah$4yA=uoa!J5PL2)^ zf{S3cY^_7VN!pV7>$rLNyV4+J%=FbZ7&dXxbJkl z<9B?9-#hX0<6?QE{h5zDEWZ2u+`3D^&0L5x7vju?I1?Yn$BzT&p@{LI5Cp=H@OZrx zjT`J>yJqhB*k}JiqcZBvT1+mS33xE2q<8`_Sjvw0RRn|d-IET gAX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x18hk|K~zYIwboBeQwIRY@o!uDN5>jzY3i7P2+hXel^B&VLSsBQVqA>{ zvYB{bi5ClrF|pmu4w{$}^+1g#4406I7Z2Mc-~n)w+Jl3Lf)cxKkr_oII@gxsisO|B zuR9o)W<>1Z^>=!Il9$i>{odiJ;Jfd4?=Jkp@Bf6UsaMq2_K}}&AQ~0dSAq9WMGo4e;W{99y<@aqQS_G#V8L4}M5Rg^7XTk8pXKnM-Q323d+4;NHC` zk|gu+;Y&I?c5wXoRt5$>|)gECy9iF&vzF|l8MEVoIn2yI-Q2# zsKCCX*~R4i_k!7MpuGG?N=l66<>{%Zu`)Ne$n}8CzN5`tJ==~!r~Egw3^Fnj0U#O` zIdNhu2M*YfWw?C#cUoH1S;MH`bVHJ4PMsRVYF&@jx{lMQ$5>d9362W5JWYzvw5*Zz z6c@kCo<05Kk09i6 z=8Q&B%p0dkPbvi$FFwF#Ga?8kE?pW&6c@REtDHKoGBafa0Wg{Lw6@;I<@$+Do8CdE zQ`6Y^0oR6 zb+r{iFflPPODra?xtUc#BuQpuBtm0j5Uuw0BN`euuL+a!H0hD$6mIuT0Cw$qACIR3 zx4R6p*+3v*q~4pNyY&Kk-9pCCTva2ooci~8c=%8D?k&P*Gg45no=1=VqJK!B&f7$C zKJ)in6(l{0gv6643B2B0Oiw3CrNH6X_`fl0h5#HobQ8b-KEdEKwr{u4(XoSV+wuub zR%MJ)1R{!y06cyAik6m2N=rB3^HnlCE73nBQ2*82F^WKz5|1YtAD^MEElemh&CJX^ zcDsqb!M9@+g#h?`cR74`kj~Br6c-z5Z+B2yx`DCBAFqf}91@9$!0Z2+wze7^j*ay6 z)M7RpR%}Lb$Wo$FksCLr=X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0f9+GK~zYI?bXdIL{S*W@$b3!GS^*=ye5ex3Y$SwRy4&HVPnC{#!IqN z7S>7)OaH*sG&@#gp(uvJV!W-cw=5=QV%)jLxYt4~W;NY0v(Wr@&*?d*Pn~mm1WijJ z1jA$y|JVt0eb5RDqr1H%_Yi>D(NZ?|;{eDKNaA~aV=vC^h}+4L&LI6> zjmw)PA1NClK#~M+35)w^iXM;V2%%PO_f-lDkpAO`G=IdW#IdvN&?hkfm$r* zAM%sBYK0P4_LCxO$l^p<)(H4dL+`IrfTX7YNzWItFKYz@yOU1<0000XP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0mw;2K~zYI?bbg?n?V@I@$V&X-ZyHc#3%%tAfdFRP6`eVy0(K*6brg` zkQNtdJGZohlSOd~Zf*_=>ZXHTU4?=URTQI$S_4Vin7n^G6++;B^PVxagTM8C?zzu< z9Cs&}e7Ov~;w~dt4%{iABKMH$C^E&JWrvXqlYyK`On0z=({O;TNRYJ-g}fpf3(;)& zcvR-?iB8zA`k1#Ey)c+Q5KJdE79NFg8UblFVfA~F{+#7m7cm{a{wUFxw|J8ZV@WQK z=N<_-u()?!6H%G*bAvC3WjRGH$k@5biz`#Q>C~}KZ^1vlCgj7h{GR~`;9W+)9mtcS zO{!SEGyUiJm4zlT+!fOO`{oFM2bM#kT&emHW*B_UgcFMiq34L(OxhnJ$U7t%xmPE+IG86SC3~Vk0VbF9I;1P}ymf zTTRbuTfpmQO>935`fj)sQ}~?Jq!2YB00jkxdYYL{sFXaavmwFzry3KfCg}?gd_Dto z0iPagq~j{Xmj;75i&)vg7Ld^d-`W(`+yB9P|gW!U_%O?Xx;yhg( zLp(a)o?FP<;2^?skyV7tRe!m{LbhLv*i1O2EEr=a8b5chb#A(`+}%g{<%BI-3h)1J zUXs_f<-OUxr&7;6v|r{lKYVWEB&XOv!Tp5t6Twd$l`UZIg?u-y?^8G>c1eYQ0@}pj M>FVdQ&MBb@0HjMiUjP6A literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json new file mode 100644 index 00000000..6f10e182 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bf.imageset/bf@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cc51e48506006bd26fc20ad36acff0aca67c05d5 GIT binary patch literal 529 zcmV+s0`C2ZP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0mey0K~zYI?Uqk#6G0q?pNSEZ%|Bzold)6<_mW)quavppFf0cH9h0CC?phOF!|hix8kP5}aJ zKB(m-vSdJ%84wN-CqTI?lOze^o^6^-mdCU-&KqE#XkQn{z;V6t?6?WuDCkJL&msH5>@6UkPLWVuTr)F{Ux82*JY(je0BR0it--gX zx!1SD2N7A~$CrzowG!?=4v!|`UWZaOE1rSnB;?ChQsL?bKYME5LIoZtp{m1!bDcf0 z@34~UCDl-0T{G!Fc<=JbeiHit3Ao@=6G)+Aj5^3E!!vY{+kwVBm4(O~2*=^m@5XvC z(0*>5Dr^^F;l1(ylr#tp8{~oyiW>bYM}1{-&Jek TAMKDy00000NkvXXu0mjfd%N!p literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json new file mode 100644 index 00000000..0d20c7a7 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bg.imageset/bg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3aaad4043726fbc6bd1bd23abd6d03350a37a6f7 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxnmk<` zLp(Z@|NQ^|KZ}j6O`xrjb@fcP8;k`8uLMe9_(0OeZSQa1o*&=OzeKs^X63w%b85Z@ zOloXASfn6Z^!)$qpz7C)YZh7W|iQKi@bmTr}$M{K5oj ox1Pnk$~p;G6kmYx1q&92m@~46gTl8Y16{-5>FVdQ&MBb@0KLdiTL1t6 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json new file mode 100644 index 00000000..e618bfa8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bh.imageset/bh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a9c13912954438ec53ee42f33d7efe1a9273eff GIT binary patch literal 601 zcmV-f0;c_mP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0uD(;K~zYI&6iJW6G0fpf4kX|lq3WbqO4IAqgLt%P_T#;LHq*hK|S~f zQNen%>P1oX;6XtIPaZ02C5R?zYhq|rN^KCY8{2|XwAA9CrY%i&+hjK$N~9DvIp}nK zuJbbUoA;gPof%1gJ@D1Dr)?d}Wc`{#@5@k%#WB)ZstXItL;j^=vfYRr3gSI-kZ|HL zk#8UIpFIJxZTMeHu^ll@=5rq?#p0BnB{0V)gh2qRVrSDnd#TP97u)>Aq)-t1T)SMjckN)+og1k6oO7@E n+P_9mrqKH`REs5H5CFdc5+laNWzjjq00000NkvXXu0mjfi}4M^ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json new file mode 100644 index 00000000..a3485c80 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bi.imageset/bi@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d13b54aff1dea98a654e76d1d7ff65d99b7a93e2 GIT binary patch literal 956 zcmV;t14I0YP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x193@2K~zYI%~#J)6n7kbGyHNzii9?pqS+RWxM>511QKp~5Cgqqd|macgyVVJP+e8 zj62`DA__10Bs24Q^ZC5YOg^7C;E5AnTCF6oF=4fm-QB-~0|Oz(Vx+@CZrSqT1QZmI zU0q}(LiYDhAbx)+$TWgMvbFX7i)d}td%Z&Z{?IrEA_F15j=ny!s%rfO?A%GZTv_e< zBmEQbL_8B&8Ip|0_19&wyt@F4MXwc$nYQvQdY+)-LB-9U*&Zgegei&PFxlB@EG)}p zb2EANEP4C39!@8D_^_T^%{_92eDuh)bc!ju=3LzMVAm}`K`#`rHc-oZOZUvhkfg^$ z+H7Q99XT>0<|zufe?PfY2086i+WNs-w0xQ!t-`?DcQCK7tA z!f5apj*kCqB zaCh7Vx&3R%9Y--Zc4>uIPyiGb8g5N83Fp5~>+xc)C6j9 zCvwM(0szQM63G$^k|h>MDNV>5TpC2(SRJ~ac3~m4V9Jr8pcg>9unGWssU0^yzX91q z_did60{~Q2HfH5CXgC%+2G?^J2#OmJz4_wo3IfXkQxPHoX~>W<93B3D5gBd{D9bA| zoKHm`BZZVHcXH{W;k-P*JeL-^37JpLXO90Exs1slzQv&P8wBTknd{-`L;QNK6VJZy zz_9Pa%Du^XbRTdmurAz0{6_+YZ7X_hTkGBhvAgVW6d>_|IZGrW{<>%!g83iwh^FD3{O@ z?3wLh=}0MG?)Y>|+FH`@7xR2RvZhAgHGO?Tnm6iY!&t+L zkTq}LrY7>t8GW(2-Q?-hH=z|C*N?fXvSzkG}Q*0000|gW!U_%O?Xx$~|2i zLp(Z@O=g|i@alhkTL7Do!!D-76H8Rtq=UXZVC~^qJ#$5xL~Fto#TV$fp;g9LUT^cC z%FPqMDr}WGc;x7Z7M=D#`_CNu^wYxntClU>vG8WKEH~LEK6K2`ZYtO}J=}8_&|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json new file mode 100644 index 00000000..0e347c1e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bm.imageset/bm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7d99c3ce39f9dedbea4dc213471e5b9d8849fefe GIT binary patch literal 979 zcmV;^11$WBP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1BgjPK~zYI?Ua8^lyw}(U(dsxaCC5Rz#({airA5ep)*4yr!F>}61pPW z++4b;%O(trwZ+zQwVJI~{nJ*Ope|D{1>8!g1#?Ou$>=;mt{Vgl26w0&cffNyxV!#P zS^PL#JI?io@4uey^ZI;0uV>#M!fz#?xR<3R$%nEw@WIy&ocrk(Uat>;Uyp1=T~x@z z(u1U)wKL*$0kBFR&(RE#)X@Q=3i9aOzK6gf7{vGLhlWmfO|szFw|tT8#8kDP-8(V} z2@z-EE0@Jl{koRQqOG$mc40oTE7F8wk@c zB}|{P6c~+EN<&NZI)0Wl5*8NOkuZ23Rmk-OE*)O#Rs3Ek= z3g6ukxqW#g_6z4}R3`9_MMJCE`T)>Rq0TWkN58qsv2!;l-kZf+uO(CZy@9=XVR$O0 zFFP5hMod}kcdWn&r~fe zDgs@01~QjK;^nGoePVtNE02E;fVIA!o}wc3)zzq$ECJwp)>c9-|C}WlWQo`6%m}1w z=2CC$oBB+cSsMZ>Z~Oi0hq-&^3{I1Y;mS%>B_)2j*{{|-W!y1J^QrG}=-dd!nfx`{ z&9xI1etB82L?#4@j)VbRaceQU_Yfk=St|WO_G1@mYGwJo>%?e7(F{ICqu-&B&OZ){~#%8?m8$aWmGMn#U*Nz(qvaVFtW9w5wj>K=~C`WIls6 zR!Pe`6_V(k)f1GhahN+OJ6*u8vkqF{T+8|mJ87)=5|^=`E4gvJ-y_ZH5n5x?3<$hB z-!gsa8ZN%9!su(mBX|f!LAEE2Z56#l4?1Vif+1*!Rco?QXtFV^iNgA947wWwD8}0S z@<9`Mm}uKL(YEn_<$`u={%f9y%*+#!nfc#{{0)AcL8E^bfFu9_002ovPDHLkV1kHD B-dq3x literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json new file mode 100644 index 00000000..aada7843 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bn.imageset/bn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..07e87ec532757ef2883da3e9cb2c666819cbb147 GIT binary patch literal 1292 zcmV+n1@roeP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1i?u}K~zYI#gH}&qp@tx=P$<%1Ar!I2iZlX|v|XSryy^<>lp6R8)|gn>%ch-P=$1wokc!xPeG}5MjlCbxGIIvND;n zq?pXgx6raOVOX*6L&Unq5~&#>ax+ilKfsE`B`kV%Eycyf2-75Tv4j4vza@0yXVjEr zM9fCmF}(91BIUVq+_UaS_Qqdnw6vo7QqX2(;8?%m7>9`6*o%msA11=evc+NIH9zV# zSM`WZ9-r_ly72q`;^WmXin_WwVOf?CLWpa74v4;;yT!lh{c@KOLJ0H1MR94%`y%vH zv$z>2+9vG5&qSnir7+v3*T^oHY>&5ot+q+FqVZlrCPwfw9S4t4T3Sk0Ru=2lt)sc& z7)Iyt$Zwo%CVHid_BSetc3i?cZ}!OLQ2i)VUPsUT4lTWUA!b{8O;cTl*s^JcczABw zsHvpOsyLmJCl;t)@x_!Jp&|{9t=6ZCmlAxUtgK8_RaJ@3jt+5dX@$7na8jI3$rD!B z)e&ioNXIzVp#l`-LP4(0<_#)sK_7v-2nUWt__5K#wxP#~hb99dcZ_GFQ>ifr0Jv9i z5px9J1OfyC0UCX&RLsucXmvFU0WD+Nc!3Y0Y}uIb0!Rga-$+i9DV(pdw!*{um%S9^ zX~>pDQm0O1G>nlPWAm(Oob9&gc5EKk6451zCfndK&CAwDd~Cna&B2CKLt)jfVoRX3fG%ddQ3G;aHwnT=+du6U}a}m9) zU}Q#d4=6ZSWMmK6ZimBXO$zf}ochJ$gK!U>&e-ilT51AMKUGNi%GE4?GXK(qM0%^- z^zYP>6oH=UfC{dBhiiX2475mOCaX9RiJo@BuE+q}jo#aNElU=;f)hCOz_;Ec^%ax; z9WGq=IT&XY>|TW=Nh0kThs0u&D<>qHJcImx)I@Crd)&<-j&KAMN@Sw+^*hwoTkPI% z@RwI)kYzXR)$EChM9ARMaAE}ZeePT;98N42e70X<#Smq)YgOkls zcJDXYQyV{>?^q&ZAq4z!(GJ|ARs8>vB*>kq8h-&=G-uvb%J`cA0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0fue)gQP#S5i9A|*(1d%n+&_QC&y=8JZ#YmCIM90!C4eE|q~ z=`XLd*dNwOQ5s8wBL`g)V+yHKGd>tZQmq`Es002ov JPDHLkV1jik&S?Mu literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json new file mode 100644 index 00000000..adbcea4a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bq.imageset/bq@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b7efd5a67975ba9ca1685d3aae0304545460e7 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxx;$MR zLp(Z@?}*L$@%H%1$8&g?Id16c>^J6J!aU*N3g-(j%=mcW(%bP`9}PQrmngrh`}M!8 z)z|&`^eywwIP7YE_;Km+{cOHhdaPJvL6}FXeM8KyuW#<|?!V7w^53rR<40ZZ-*23^ qOGrq3VY{Tr)6=sZNjXRh1H;zo3TH#>k~RTd#o+1c=d#Wzp$P!RMpfzn literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json new file mode 100644 index 00000000..91c2ab48 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "br@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png b/Passepartout/Mac/Flags.xcassets/flags/br.imageset/br@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02e55517d532592d89a38962e20ce2d36d61e366 GIT binary patch literal 1312 zcmV+*1>gFKP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1l37IK~zYI#g=PqlVudge{b)%t?SxtW$Pwm7ugsa+rngv5DjR&Br~u< z_+lccF(wAd;^hmVC^6xKL}MfxjnRat$pHPJ+%(2SE)fwn#)|AB-G$M0EnT}__I7Pw zKWrp8WEE&U2n4Ec@cIR-l>tC;?h!_Y+{I76l>zn{C51=DHRQqPW{1 zZMt#xmiJI^9tEH&Z+U*3wYXiCI0traTup z>Imn(MkeC(-AM{kWAgJ!t)2DR9%RDp_>Wx&us)c@>S`0q3iV{0bcBKup>T9war^Z` z)~#yCV)P>ju)-MNDXW{FppL)Sz5Q8GhYo!kMl=qUUnwXXB52tgn|7Aomj$9>? zW|CM{na=jDr7W!uke8i?EULlf2?HP@ARw@|>T;q+x-v>*u8RWQI2XJ|#;4p7z@BK< zwOL-?F7IK9MqJSD&R!eGPmbVphZz@RQ&Bf+RUdWLW@;aeP*<VYBK`DrAU}7{C4Q;^6yZ zeD-kwi%HGyy-O%BGvFQ5C#`2uPw+w2Rhn(Xz|{3UGH4|@pH?^nlZ>o#K2ZEtoo9mQhw;TaXNW@*u= zxh|^ z#sFFB2s({OL&X(NcT_Soq9i)iBWjh5uo$B#KaE?XA{%N?(X!<*f*>&%(y+5_Ifwdl zi7YV8;0}{@T5eIrk)a&MV{&RtezJ^XG(LP5wKB?0kA<<2j#x}WA&*gLZKq|+A-1mn zg}4M?_vf;+eL0TMzdwEg*o9P9#R6TJcUJULmwEg7_XYI?!y2+oK9uswKIsbR*nOpx z4xiz_ltqBnl-7X$kd|$KRM4F7Yq21OL3K8R5t1RyF2DZRKemGWXVv+;hK(Rl5n zX>2@O&4I3^DMP>_R>cuf#j9;)JZW{4shZ%M0V{E7?)3Q|K&ExvX<2LuV3Aw=z0^Mp W2-+%E=NJ(H0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0z64XK~zYI#g$t~R6!hvzd2{lYMU-*v62y%6<%H{gCM9dhz!dtvNGDR z3vCynB0@Cmf)5r5L4^-K20`=?-F%Bcw3jG)lZZevwOA0Po4aQ(XL?9&!*VZYcm3W5 z<~Q@r{D=RD(uSkMUrWjgUA21@bHwU-S?}eK(NX7@yG_FP=%Fy0FC&&0XI!Mn;mFaZ z2G;9WmS%|FiHyr=3dHm%942!A9_HR1M7p13Rs=QkX(*qM(3KW~=gy!;hB72F z3szqbW?e1eu1*M=X%_j%jr@ffAl%i7S+@)8WpDaKq~IAY}FRpx*RRIA0b9rUFaX=@p~eHBY*tHC%Cfft(ES|BH^Q|J2!@grv28KQ&k4A38y-APR>X?x ztTx!Z0p7lV!~2rU%UEqB7WsK_y%kP)K-f5vOg1P4c!f@d|U? ha|CVex;YV;;uom~q7b;g_hSG6002ovPDHLkV1kfpB+CE* literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json new file mode 100644 index 00000000..23283e2d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bt.imageset/bt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b24dd866da0d5120220e95cbfecb2f81a2b38d5d GIT binary patch literal 1139 zcmV-(1dRKMP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1Sm;FK~zYI#nww~R8<(j@&A3zojVU^hPIZDCbm+LDj0bPMdcw6BO9Y8 zvJqVv;|3SRjSJKbE4GpV3r)}k1~G_=NfRUi5el}BjX_!jd8f!sA5%JWA9LFKE+YnHLju>G9Q+6=y zzY5VdgzuxsJf7Bs@B3uWcH$rY40Zl$IIt66IOxSfRh>ygR8>+|pFxkcA{7lOCFT4v zjQ-2S1`MLJ79iqj!qYkY`KwWe3y9O*SVR4{*O@E?z>2D<<%0;}p=lZ^WhU~RhrVYE z%8n0-*jCgHmG2}TC05b$3+qC_CE6zm-6^{Dn?;(8yx-ALH52&;JxBMq$#FIer#~=p-SEPH4_SOnC!o%s^OzigT5O)=A`8FVXrToCfewu`ZuP zxE__(xkS6ZBaBZW*)$zv-?lMJ-y1}$qZC_DvVJ8}O6=i0!kC7gSV(!n6)K~{;JPS^ zg7x!$D3>rV^$|bQeb>_W1QEs}obX|kfgGySMY`zWRUSiFDLk)&UY7-3r{X%qbKjHf zKQrOl6NZ%iCWN*OS46NXotS&K6CSs*%0(>GLe6TZ_~c5i&09md^Goy_2tSrWiI`}` zF@E{~hzZ{sOB+TICl-t0bvfAcH#4$)9YMMgJO_EI3z2L<2?Ta3%jlA|xKAv{-SiE1 zcII8{Pq-sN-3DaPN;r50F?}iVM`shZ%;s7uLuThDbhkvq)_3ryHd1PTnSmMYJn-C0 zD7`9}!sFd2~5}&&Sr{W`9X2a?65A8S*6;Ei0_}d7wsM05MzLWTljpWyF!woge zecP~t%2?^wQAncO-^H7^ifAH*diK|G-vvt=$&#@%GRBI=J{VIKP8Uq3LRXwmwsI%0=2h^C%K{rojD-}Y4HIInCVBOOXc9CI*_ zIe7+f$E^`EMq)6B`N3NlV;}(3KYCEw7NK}H$rA@_#JJ;(7(FA`huKOvZbB@#pK#Y^ z(mjVzYR0$;8Dp3oFI3-yJs;JOa1(MVNV3PR8fO3R_zS%DxLj`w#bp2h002ovPDHLk FV1hD#7uNs) literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json new file mode 100644 index 00000000..d5bfaa7a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bv.imageset/bv@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..311bc00f769235d1ea81aab31dbf2995df2bed8e GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81FdBNg zIEHw1Cf7)afB$iNWv~&C1%om>d-JcKpLr&S$0we6ZGGqf5Gb5EfAB+^JJaFrV{UEy z+F=had6_&gGOs`5vQaaHX)&K8I}E#6Kl%Uv|CW;D4>$$I79KfryJ_M?3-2(tw6r-v zObZwC+|gW!U_%O?Xx=6bp~ zhIn+oy`;!@$U(&QVzkkc2_gQo9GX@)vz`%BSec}~hUv84E@m4Em34hf7OmCyY0}{P zX#PR_pYJ^TN2)f*xGWY$n+CJ}G442{VAOo#PNnZg&r-ql9uKFTueOt~3O%9p*)lPH zUt?hL!vMa?KRX;#CO4`~f4w%Eckgu;*q=(X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0)k0IK~zYI#nwMh8gT%|@#l`?4miN;i56O}(xPdNNYffa+C*ZA>7on5 z;Ns%kkZ96D-+&V_(cOup+BkGDoi(;4O(0RgKZA-Q3f6k%4)jj`guaVkpI7k7GkvLx zM53e>3Qkuz4BBMEX*>>BG>V_2qae61OsiI-%#wu5wKbUCZakitfSSvZL;wJ2HJjyZ z0|Vea9%#iPY(5|Kiwp7)M=+?BHa1XK6xjOvkzZbhFg#2g!sx}K!Q%Cz-DsepD6so{ z&46K8LP%;_v5a;;#U8`1uD-wZYYz*~M z3DWd5d5DrubFWudal5qz{pt$7l@)0DJaGs^^L+bsX$dyJAFL?iBpwID^TZ*v$?0r1 zDis(zI`D9F16B}V9~vSL(aUAVCTNZm$1bO_D-z z8q!Q_xw*V4EAvE*sNlQCB zLrd3T6a-ZF_rdi@L=gZ$*S>u>yP{E06a_V##q(GU)ntl1#Qe_xaCdTox-7%m*N18@ z2hQ^!9-(Y}`~LVCPp76J27|cX+ywu|M;!7G*X-}nUU)A700000NkvXXu0mjf-eW%5 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json new file mode 100644 index 00000000..48af1f17 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "bz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/bz.imageset/bz@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..db05dfc960d061044d795844cbc7f217adc8a81b GIT binary patch literal 1505 zcmV<71s?i|P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1(r!fK~zYI#g}<((`6XPKfm5x+pXQzcI!s34YxW#m>W1$Ku|yk^GL)i z5)%_*f_U)<;(<|v3TiZjAl}9xf}jut$6-_yHW_ml+uCjJ9_}jby3uyM{KEue#L}S& z&!5lxJm2T@9(mvA6>7A3dk}=Xxw^JT;!>umA|m0cQi!85m1IkHNl~@RIO$}WR7}1p zmF#pi0DZ$_xO&}8gd&sHDjx4Il1w&fX1;-SD@&PPAfv!&qrz2zBh!IFW1zm@iPI&p zc~=#`whl~6H(?N^T*B71w<0q%FegjOjuTtC$uJvtz{`QQIu@Dc@j>l&Hm%r9k)wpl zGhx=eeU!jNI3ayeB0*ZUg0Eg(%#^$#(tTp~*X`xn{1WVrX$VFUsw^2!Sq~50vYLk0 zYPKDDg9mP%%J*;IM~X`R|A2@^0-rs*oc!D*4xZYDy>J%GO3K;a`VJ>MD(LBMVra0J zA3MJ0%Z9C}vom>e>3a4Z`v5m}?A}<8M11-AUN+*<@|k$#m3(|`D~~Q&N17y^eV-nn zOqj!t`q$6|lgNx|nfrqaU3)j*A3ly!l7v?$B5ef3slV~avg!W~BuOFV*$2y*tt!G{ zD<&@^pOLmUvcoa%n!bh?%v(t9kWn#wi1!P;6r>e$lPQ~&5UiTDievt2x_g{F|Il2N z^7zM5oRwAjWWP+4e5t`@bL>crwd|?=oK^OFIl1F4prA#TX=U1j4hZ|$clI#l*RNzr=>-n_ z-1@Jz;%<$_sO7yA+o%n+l5RGm)oK|V>87);f(f68iTWdCM z*dWQt$t0&{qe{{7bLwY5{X1m zDwV_}QffR>qH;9>#qIneY($!5LMD?D3WWd&N5d@8&E|p9hv_)yjSCWYYYtbnqqlY9 z9rsYxTZKdjV^HL9s`(3=y6SPcZzkl`AP5T7hEXihpRf)$QDVCdEn0Rr>_+2@kP)?V zsIvXaL5@^+u>Gmk42sWkxaBAst(c+43glKBgV8p+g$hg==eZD;GH^l9xJ*u$rP!uKrGwYsEap(_L3-L-xPRelp4ncBKN$b;!XFpPm%YwvWaH#S(=3kdffz3<-*=(uY#5J};%+{$`9C{1}1A*+%uNT*_i*%a} zncq(NhQ0VN(+XsTe4`1q0iLk{^VaU9<*bG&*UX@-XaVUy3GaTlfdQ9`*AH$a%{PK@ z-cKN1&W07Q;A+${|M8u8$AgKKKqxMLtfyLKG$j-b%&_ZOx3ZL_v#oTFw&2h^XdY}v zm!v}@&fuF{&CM0Q3#{aP_(gg`<;| z1VHk1-!Bajk&y6;{LNafDC-|4j>Z}!`Tmh{gsc0V0LK3Sd=wb$h$tE`00000NkvXX Hu0mjfpeE;| literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json new file mode 100644 index 00000000..577ec34f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ca@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ca.imageset/ca@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3423c45ae18eaa44724adebaebb0f5f44a980d GIT binary patch literal 450 zcmV;z0X_bSP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0e4A6K~zYI?UpfX!ax{?pB9n21`%g>=^$=`qaa8JMLYD5WO6Fv;^gS2 zKR|HMu1*CP4cM`QP-vYj7^s4N9YRU9YOaa4rR@s`m&<#Xhx;zycL>PdW*8&!s(%08 z={u+V5dDK}>KB2O%P^UIBglLX(;rSV=RY<3y({a6= zdyr5FZf>l;X+paVvDg=Y7zT{TaD5HUCY+zIzYhi>9EN-z9v|WMc6X?@NjbAN8unNq zAfoH*zIa?Do3)=cO=P*WGV5UAm|4|9Mx*_{&6Z5sDP93YJv8;Y`ZfdH-ND1d5kj+C zi4==!yAg?q42PfE5p|F^)oLO>-)?^*A@cOJUVV=OA|jH@?e_P2AFlxiJtOaRbp_q7 z^*igjm0=A7S}o8tS4;X_&APa-`!6qWb_UU?)m+MZ(OWEFHuJoUcaTg5{QmtOg`(#! sH1Cy4IeSDLEx+hubRhjP5QW3~3X-Hl8y}tDyZ`_I07*qoM6N<$f*%&i1poj5 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json new file mode 100644 index 00000000..e23f3bc4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cc.imageset/cc@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..70e652a1c252b5a82693563f76b3b0021c514542 GIT binary patch literal 650 zcmV;50(Jd~P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0zXMaK~zYI?UqeQR8bVie{ZH4N6Q>j8np}}7_G>Zz{ntNBBMn?&`#P3 zx+>aKxN=k5A_8mK2hCzIh{A~s>h(cIwJ8`2CT&pDXKEV7jLA4H4vxL|oDW`@v+xg> zd*9)lcYpVubMJc!odkg6EUyB#Wd=xU1;nVF0a;}ZB_6g3@3f^ z{CHF!n04JV-e*l^*z_ACq zo-nq@`2jm-O4*&}+!`^ekvm zbIi_S>D3g4Yw2daKPV~bsDbLD1$(IrzNc8Rs-=do3=)e&QxNVALQgaJ8{yPeDaPM( zR^GTsYO<9UgVq<>`6`&}%%~;*=+&-+t_CQ`u;e8N@wnuaWdgCBnrziOBF%Vj{CAK{ k0Q1V3AEOlzqjCo14=kaW=lMg_LjV8(07*qoM6N<$g6Zrk`~Uy| literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json new file mode 100644 index 00000000..609119fd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cd.imageset/cd@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..228e8eda8d080147983684e1b47e34d1b5a2b05d GIT binary patch literal 910 zcmV;919AL`P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x14BtfK~zYIy_J1PQ)?W@KWFZ2#awGEEm>fCvs-Bh3&RR3|451mifa*C zV1XnzA+3n8XeGS}trvp(LeUF_6}@n|M7WIJjGHC&qW4P4P48{FGOcA!O+9X>Kf=-4 z(amN1{dLaad!FZWp3n3Aj(}CZ2xJlAT5PW1kfj(?T{HE!CbX*u3Xajbc-LbZc7SPy zdJb8NnN1ZfHW7zigKB1vs8R|G$m~hoJ*)sabr;){ZQRRPK+5fE8di?rgFWi=d;+o} zh{aSxcKjs_V*9W_EH+p0c+p%6KOV-J8^xQ$BHnKQj3USqvmH?-kr{XMn*fsZja-?x zlJk>uiL$lg*r1{3g`k)fu*w$&Ze-B&%UpCFd%hf5(Y5*C515XS1`+YJe(hC@)b@_tN-HGJfJ4$U^a!3#> z;{TvDwS-aswBpPa2V4Plj7)64MA!Tn%Ib2S`>CmD&cODx!0&}EPj-a_G0jlVwTz!Q zp12-)ziU7Zf(WMNeZ-&ha4I2>)bhKWY|MTgutyfg-9Yk+Ty9vXEPE!iDzCG(#)?~t2Eeb67&UE7jCPQD>oWJ>rm@6qXXo@%1Y~3a zzwXPX)D(h-kMqZ}zIGdD|IZ2-&kw|;dC#2dc3&gA;#|nH_Q@EvZMb@jzFdD(N|&l= zv5GkU(kKE5A{dwUVO$5lIr7+3zR9-&0kB`*G;|~c1paj=`mXy=!=_0`aF@Y4C8|fJQ&hQ^x(`#7gGwNSRlkPOkD76=7U^|{uOTduBz+?XEyc|BRMKJ< zX$qpjlrM9%X$>XiTWFW`K>>n-gstIDa19}YgsMSfmWkaU(K%yi8iIm^szId%)2coU zIWosy4qd~5AVblhpW`96P~w4@PSNe~G$?|sO)QJso?;{VVQX*=g%TZ>81ia%aN)(W zVFB=gWQ%8i@a%9!RD&Xj?$j%TyIT3*@VzuBf+#)g*U)Jh%g^6<8o~mJl!ie;BB?X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0f$LMK~zYI?UubuLQx!spL@91tRz38A;Us&C}?QwPjD*;S{;I>7MFzn zf}jRloP>skAcsJ=#>SQ!EL-yfxEwV@sjJ^XM*Lv>*RKL*k<0D2>kEb_f6=EaLG!a=9g< z(G#-SWfF;Q##Pb)$n?$C42sz4n|gW!U_%O?Xxj(NH` zhIn)yy=u$FbP0l+XkKl!IbB literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json new file mode 100644 index 00000000..ce4e6abb --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ch@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ch.imageset/ch@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..811c7429716f8043bc2a8e830306b290a04fa927 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxUVFMY zhIn))?^&h0eO6sVKamjyssvP6n z3nXV7o+$Bm6RZxJb^1f*Z?#Qlq)h^iUkQ{LWXK%y@HwevT`0!9dy`g|gs?e3bN32~ zt{d~Oub22&`?pEy+vj(=ZO4CRvcw$RFl$B3VJ+q32bL{x36KRUV`iT9_}||@o;{+? z>RD{P&K+H|?)%Fb8f@IWxI=KZTb+HSi*0*?cTUZ`ItkU+-RquRoHR8n;fmsmhBs*k zwr^f;AoLOF%9rma*sqT>sJZ7Ir_3QO0dW}vLrSQle(tgTD}df+@O1TaS?83{1OSl| BeeM7N literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json new file mode 100644 index 00000000..374ac228 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ci@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ci.imageset/ci@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..54025ba93f09fa2f984aea9ca4488d11f7aab50f GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxqCH(4 zLp(a)o-^caFpyw<7#{LqDd$Q?vnz>>voe~wN;XXY>-+zT!5#Da1(|bpsmONSc)!jx zf8v(CYo{-7iQ>JgD&lvbBl(EoBZYyeur;OXk; Jvd$@?2><|$J@o(p literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json new file mode 100644 index 00000000..b8c0cd83 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ck@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ck.imageset/ck@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1543a11d5d5167d0a9e9ba6d95570d520b9ed92d GIT binary patch literal 1326 zcmV+}1=0G6P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1mj6WK~zYIwU&EKlUEqVe_y}0Kr5DuRxPj~pg16amw|#a;&e;Q2%6xA zmx#zVhI8sL(`}mB>7vFM6T`BMFr&fiM2&7{Qxu)zg-n8?a+8Y!3et*=lvb!M-5(4T zDd;-({CB?dyzl#b@8z5$Tun-S60&68P;^v_+IU=C zqz_c7|TbZp;l=lzBIS+L+|Iy$V*3ke8NyLx*o+4##{z8f*0mNqL7 zKT6^2)JQ5TH=z9$_y^QJ>r^=Hn z#Z}QMdV2Oxv0AYijRwz1cHCi7#Tw@-Tdev*@?Fu}(M`>Iv=jqqjr(+GAQxIS`WGTVNKn)rAs{U$P_z?Y4gS9vkvwY7R;W4H0i#*29FImD=h*?f8bAbHwIMvorW z%dtk|flB2@P>`CPJ3k~QCJ>d%jgXL0j)fdK^67*vsc-TyF@fgWRjhVTpzPnyBa8~(DnYakt$r>mDH#L__eg1mKGBLCQ}E;j$P++ z(S6Jlrt-k1;9PMtiSwgbwro0CSr^I6D?_h0vS-f~8X6u`TG~i)aXoQy!GwltC@Hz$ z9i~jG-F34X6p>KkFazs;xCRUb^bYs)^DD^DujpBuOco3V6OSIXQB(8WrnA#dLxTaG z&d8!glc}p~K@bG&_O8;4F!2KrLL5f<7jSWrvV3_QQmM#}9cM9{Ee?4$TPGJT+@Z1Y z3CYP*sIJyyHe1S^Ka*cVM~4-SMunG`0*htf5pHYiVElMLl9Jx)xhMtrI2VM(!4UJt z8(!#iM%vq-y^`zUp+Kc_qrUzzcDp@y&@vJp?#rc1Ylw{WdoBLhv1$qnzak>S7Z}7I zX>M-CU@%iw)`-DiekETf6RE0d=Je?@fWhk#fb#MtGBRep7B?+z8aHn~=vfb{kRd}{ z@b&e?-`^XVOmxVRN+pDc`w|u9-|JxO`vm(B$j`5!xVWA*Yu@ADy%u)wzS3)g+}vbr z-aMD4rY9sOX7wuJpk@TXU@&8`SP?}DDJd~*+LVA&=|Wc4BI4qLsjbzc(;55p(V%9e z8yhzKhFmTsB_#%lL_ndCBa?|(t(|0Mo_A<7sOQMbkjX@zJ+pNM5(Gq1=(;hf`+vjz4SvPfOWVhVUjP6A07*qoM6N<$f*IC=A^-pY literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json new file mode 100644 index 00000000..6983bbae --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cl.imageset/cl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..636adc7d17c8266cfd775bd37c7e3c0806c3367b GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81Fe-Su zIEHw1CZ}wO+1J(huwH|CVncK9&vW0I6Sa=4QWsj2wrEphO7p?@0@loiRlAtCJ1-NF zHvUkw@zPmEof9&dfqrcn<*aORdSPs_sf=wipDyF+kE=_KsQQ5ID_!B5|+&mv6Cqf<;SXV`Jjwhs$}czpGFA@%z2~;py-9Oa2PG zvtXz41}m44hPe-qudnAhr8rwsEVuqZLcYg*m(xvpAAX;&XWQQNm*@Y#zv(C5+n-iA zaoWs)@8^f7;#~j#K97IlmBGa3+juPKU+rgMxwiN0omUTh@BeuH@~zAMD_?QQ-Ba%g zFMSeb_$OUq*QLdr2{LQH7#v*Td;tY7DCA%eJrroNjGa{*7X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Od(UK~zYI?bNYK!$2H>@h>L1kR>F+MTqzS&O#>(BBh&)lY{Tj)i?1O z>gEfyIyu-$+85~PVglAAT+aP)2zM4G+&A6uzvIUpoX6em9Jr=O_mAtRvu%0aXSSH_ zmibjZ?lTKK9P}LAdk&)KAbJj>Hynr`EBsjfJtUhpq?6Vf5}0mGMlJEFB)e=tdW44^ zpKm_pOK5bS@r_ikA>vpfjygmkiB2Td$_!xzQ7u%@0#$o-UmhO|fwFiZ6P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0gXvSK~zYI?UX-H+dvq`e|J|0I}U^jMH#zR2q7kfm{>ZoFz^)^I|;pPD8@kw9I*J=?)9DT=l6O2h~v+r z8weJ8SBZ@e1MQdK)Kf4JpG&JKecz_4CbwQ&3GnCIAgprq2O0Ysg6gda0T=5PT014g zTY#vKDgJDXJFa``CV`|W&<%<6DWSF;B8KuiH>kQZBB8nvF+3k3OMrstylp}`QO_%FmUJnF7bfmcYQ6_2H@#v8? z?GuS`4Emz;DE{03?~s+$3PdhQd0KPx$K!NqgvNItZ&K%-!<*97*Fw~&?HT!})~@s4 zhG5SjJjjn4eI>cyE|J{XvF6b&*;(jWEAVGx^ra*^RK#Z`D-iHRj^s&5sC;STPH5|a zHc-Ty7#iPvgloXgXgm)DI-zC)%k5x5YhF_YNLB?%Rs~2_1xQu}NLCNLt#GO>-U?*^ O0000|gW!U_%O?XxT0LDH zLp(Z@|NNhnXnMH5O`xrjrH5zrOtveG9tl?zU!dcL)K5XuGq=m{V80@Gi0OVx#I<*q zrdw9HRXWH%N~j7iyWnzmh4Y1j3ko^9&n*AG=GlIEo)yX|c6-xPV^o)YKKtOR@VUm4 n6Rd?d-#4pexyd&1fiT0yZ&HqHoUZ5q9mL@2>gTe~DWM4fX6ICC literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json new file mode 100644 index 00000000..cf24512d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cr.imageset/cr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ec31ed899f8c7f66f0ba867fcb1d426452b63aa3 GIT binary patch literal 253 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxHhH=@ zhIn))rzG6iG^?>uu_ZC#VAe9mG6oqQsrC&V92+(n81b!9{`WsUA@Rok|7RcnXXg3# zzW#H@1(&lcoG&mwzWLybzY_ns4}43M?`h4fOG>Q#*zxrE&CSd&`PkC<45v8?n=a;a zWC!8qV~Rb;t;6Mg&;P@B2&lYmKKs3Y5+;Gh88U~8{{Fh& xU;ppVbV(2QJNy2=ReqfDSdzELiba-zq5bpvQ!Q&mE(2Z9;OXk;vd$@?2>>YcYKs5> literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json new file mode 100644 index 00000000..65ae003d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cu.imageset/cu@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f259ed3fab204a9fda6dda9caa977d907baf1d31 GIT binary patch literal 766 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0<%d(K~zYI#noL%Q(+v(@$cDoa+}gJHG8olOK~Y(Ofz2+0u96$G6LyJ zx=_@R)SIZAKta)qbXt^1NH;-^K%?#|%a@RpU0E7|8EU3v>SmkMxpTS@C13Mx^9K(c zp6BpCAN~*gkMJny%GcL{7ek&My~-}8MG@#2)jTlg@uEGQaO>w?lPDG*&X2Y6{#^nO z&3X9GjO`u-Kp{(H4nF1Mn<#So>QKpZy8~IsKIbIm-M46Ojw5mOjb|kN7t-y&L0)fJ z)6!&DU!Ux*nEPB4t9E30oUdLnsn=sKEJU7~a!W%t1OZ@n7DsI@mas5p>gz$0JO>d1 z0#@uv!^7BebFs$6FxS!H8Hjgv^_pjMU0qn?*--KI2ftFf88Q>rI!04H!y}4Go$d@ilb#oM+CJRZDl1sCKKL|9|Pd?D9;%2h(L`APA_UqXAIG#)2r~sHy^|bKPPmY~N_; zx<=90wXbwT5CGX~#a>VVvOK>bN!W67kS&(~78}+a=6YluHK9e@hX9BvDM$kY*s`;c zhKAUan!0Y0X{CmmkRoCdyLfi=Dl)>RA*$1Q-G17Z^AuPN2ITQ^W*ZyXlaaA@h2%7} zckfYj>^Ph6!+g32q=*fT_|=xhV33`yt)3n6|3>ihLu)j$x3d#fLc$h%urjI*zbT5S z^YhV^mLlkMI|kSkL`+ITYc!$^58rXXBBZx>V&WWVRy+K@_Y~!kWi%g5h6(_yn;60; zmCMD7->5~@Q4?BB-O2pX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0(?nCK~zYI?UX%eQ&AMh|M$KZpUpE(YEx4S)wYO3X@`JfEsBE*I=EN| z-K404pj7JMA~?8-A`XI7SBE0q>e4DIqEv(mHZ=6Rsm(`2Ut(X zqKSh<+MsQeiV32rlSE6mh%CcC|C6w|aeG-lL*db0!BbRBY8&2DyZOE*A0^As>2uSI6vg`&w}TFj9| zEU~sMPtPWoAlSz_;qrsi;EYf*ITYCh=Y*85fH9!=;VE$Dd>YHKp9!(|RmLjc)GC`l tdKIkHhyWs1sX4`wNHs=D+D!Xj`~u!d*X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Z&OpK~zYI?bbU>!%!TC@i#Y9Y7>eT3sUXWEm~0&EET^%5gc3`#KF8kmPVb3CA}iDEP26pTNdS3X8L22!{e>ATMtp=-?Pgu^!|KWjvNuG7tbL zC>0D$ucK1cnlqu3|9{B#febnSgtN<1bGE#Y1jjOtL)cae6C+V1hWao!6^Gx)A)9-^ zUiu2}TFnti%j=97Gl&JFii_PhcW~|54~1*3<0#+8UR?^ zJV8b-LJaU=Xc`UEBm>FFMF2om)g1$T<=!WrRIY)rsqvc-&pCGp|B`OdLFyeXN#g>Lod5s;07*qoM6N<$ Ef*S#=Bme*a literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json new file mode 100644 index 00000000..dbce070e --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "cx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/cx.imageset/cx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cd59e2b74b60c20e171e63c779486427a91787a4 GIT binary patch literal 882 zcmV-&1C9KNP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x11CvDK~zYI#g<=aQ&$|vKlfjnKh-v|YR6I*#Y(6sbAm-=IO;Y9(Ff7W zEFz341z!|=^-15xo(4WlK_4x(_@FR_(fzYiRK_M%jAHAw(Izo%li2j;=H7euur_JQ zO_w%mzHlGzJ->6#=brC5zu%EuTh3nhZ~J+N7D!Sn<)XnCvN5_c6Ytx{t~GhZ%5?S+JVd{8wnHZ>m)z6thOKk=D44CWtA!|00iERRTA*sT7wVjMCBke zdYe`W;7&@RcYTf~S1HWAAW*$knk)!;{+qZbrjRfsPPF7J2l07}mQ-VvX-gbxHo3c5 zr#omekdkTjmc}`bdi1MR9Ng1FN7wJzc5xZAkuXMlCCk3Nffh*8;jMZ4mMZVupk?-8Lfy|A9`RZFc8qOy`%|31Y8vB?H^KhioLw_SQI8 zKaKN6z^21*v({%5H)Njc&PU@PUE*>=VefK_<~qUF2AdDvg4-ztE3-81Xw7IsXYg^l z@E!_!acRX+VXB;Jo8ZT!!mFIbg_kN_gLNDWmU=&1ZW$U?_#-8AC86*`R4cR>&xsaK$My`Dv=ZytjgKiEtn+#3c67mREy9HiF z6!yWLv`qiFMmZ_?4|FERjJ7vfi-CK^3M@%*@<=OxKT4Cz~D|Y(`+Vf zX!pr{)4Q2i{cBRTU|5%UoRxVp{ba53Y1PUsO-rom>jm~X1%!fLMqW)}TF%+w zKY5A}aP`kMJWnn`^^X@$Ri(;BgD>UX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0+mTbK~zYI?bcmLQ*ju_@$cErbZ_~Z+ceFWX*$%5Oe=+gGKj$52*SJW z!i&KBuDj_Xspz8UD(EJ=h%6{cO1BW5=|X9kUyF2`! z^PCU-pL5P%kR+)CIK$?qL$S$#Z}|`TIe!G=9e;-V}keXR+#l?D0G*@o9; zC9U!lpU1o6)=R-aLWr15tLehii>OW2=*pUshbXn#cwN2t zTvmCV1cBU>Hwb%|Q0j7s1ii8mF(ClyyIN#J)W)iW=i>Xs{Ges+J&!uKChEGNRG}%T zC%@$`<~GNM5fE=!1qCG+?D(hp@C@8WOv}SRGl;0$is{646ecCzGI;JNKFI<21Cnnog$L`h*ek`!UY`HFBT#GA2U3^{oe6_jEwsz4Bg zUk3p&7h5nFThM9rEU$Rzdhr0i-^=Odb1W>*@ud4cl@+xVZQp^VyoRid=<^dT!bZ-l zp>T-x^)>qJ-RN~`R9p6-)h6}!bZqE6A}U2hjmY5x$CG*Z5Bax_igNPTK)wJhCe_wW S)awTT0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0aQsuK~zYI#n8V?0%07-@%NcS&{A_@?SXdi#KblJB?iKx+8O~V)4y& z`)o`^BKyQ*hv@nzvgQIX%?_E&1wLOARn_D{tZ7=6aClEj9oOFnS#^3K)_&G84Cm|g zg+RBC*PA4tzmW&ArfF3|p|gW!U_%O?Xx@;zM~ zLp(a)UfIam;K1YduzlHvOSfh_ZYYcOX1!h@@O0g^D2v}Z6GSQ}{A-qH+Q5AE$2K-~ zRu^%BScj4#2e}7ZTx=$!wh2b)D2nQtUuFSH%$4pa5q?^o``_bsu*zDMp8p&LyJxB? g>}q(ywCFdZLzCXwm;X*@0Ig>5boFyt=akR{0H_2+ng9R* literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json new file mode 100644 index 00000000..c11611f4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "dj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/dj.imageset/dj@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ba77415dd48496340bdac770895e1605bcbec6f5 GIT binary patch literal 506 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0k26!K~zYI#gx4-17RG1pF5{b#Wf+m8XYVm62W4S5Yokf0fVK3gu$%B zAmyLv&}jS(Vii%W603y4SEC}8&})fG`x>Nrt?Q*q@1E`6U*5}ePcA=c@BA)#dFfRz z;@C!_;p|y%Z*(dvQv&~pz^T|LBLhglXfFik1l=ARMe?+|AuwrA9l7*ClI*GTLnM#B zj>CdFWksM+XVZc@rXqQ)s8f*$l>9p#R*Iz4hR1Dg2uum)hXwU@R)_?Hkj)y7Bnfm)*f2^Zq9Zzr2;`%=E`QYFHG!0@g zSXlT2|C#|3MryBI5*lTltCl@Hg$EA%uMO>#L1g)GKjynpq6#p3M}Q7u}XKtbf#cq^!?sla!I z*ea=9l@&_(^?LfZ3MEv$&;)|*#5Vos1OF}o6&9&g1wE!kYF$B3*&<{907*qoM6N<$f|gW!U_%O?XxPI|gH zhIn))+bAyBKC7`&v89nC;nx=yW?^x4W*|8HI#pWoUFvng#k~?6rgcWC1#-E`Ht`|j zh>Ep6KWE;E=nOh@qNl)oc8dn{{$|!tnUDX!=hwCQxBJ`vvp?|Q@Wfz$Hs32eQtbwD zU%l=eJ#y@oS5MMc(a91LH*ZQx0D;{*>ti2kJ~^$jc=Z4M{ptuidF$U3GkEL&8yYy> z+#k0m?MKA}mQa~P2M&BFyx?+nh4Y1jNSKjfi_e-&LGxP;KuX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x113pCK~zYI?UqewR96^=pL6Hj$;@OXlW4JV#@1vEw$gY_p@@wsuB1w7 zsRpUkpM^meMXQL5N*CQI7_o&0X{9Xzp)GWw7VM&Gpiv^BF>PiM6*2yxktSvmCi8P= zGBbCMiv&xv@ZPIbvhZD=^PZPy@qOR}213ho&j)1fT^+h4e@=l>6y&^$l2j-&OHW@X#&yN&#gfa>k~@&q^9k$1nYm$D z^64LyoN7(u8`dyJyu8~VK+W8bR+kum&Eoi(5FK06+=*C@a!X}G;&Kne&GU%bx-A&p zA0jaZfucr5S)c(!b?bRJVX!jYfmAuBgrY(T%!L-QuhZbM2Z<+1I_{dnHOZO!9A`IY z&@J(}-G-xSt}O_1e!=$uR474zL!O`C&oI&Lym-Ytg9oW0B6h}oVIP}bkrV|iN&Q<| z=U?vRWaAfnb4d~|-T`2!xW^+`!ADfwF~;Uqg_f@u3{+s)cwq`}VoR^I@rY&VHIi;sT|JwCr1Y+=I( z{S@?3uAU47aPjp#_l*MYTxsO&hwE)Y#?8b(a>u4NfAgX>w&r4UoZj6nlm!$O=mLr! z#bnI|%ql^_0wq8wSUm0_cU!V#-DVE$JZPI8AN|Ykc#i0AG|?Da%hKL%M*J4Fc@MfJ zSaILaM|y@>pAUc$pGDo6PW@z%nj>4C#v|P9Bd?}4j$ZH+-<##VBOzYO|F<_YLh;Li z6vk;Ey_gF(cO_ zejs9zX~`4rg7hVwsS1VAr|1wVjDi)SOw2UVzNjoB??Rw-XbHvI(Ne00000NkvXX Hu0mjfD&?ab literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json new file mode 100644 index 00000000..8a9e002a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "do@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png b/Passepartout/Mac/Flags.xcassets/flags/do.imageset/do@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02f536d7c5162446d32741456f61cfd761b3f4d6 GIT binary patch literal 440 zcmV;p0Z0CcP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0c}Y{K~zYI?UlVt!$25^e@WA%X^S;htAha@6bgQ{6}mVGPHuvWnjcX1l|oL!R;AeR$xG_XNaK zhX5wQ$m;Ci)z)${`ui+@kUGn4Zp2w#fN&zQ4}IbFh#~<0A00#=0FB*7gCcLpf8&NY zaYLNAAx@emM4F%Ke^(Xhlyz`oR0jZLvL ioVX!Q+z=;C6Y>cF)o5!@c}_b30000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0w_sDK~zYI?Up}iQ&AL$znhnr)FhhtLebP>X^GZ96l!h7r4C{X;$mVE zbdaEnA}B5{ItdPrMJXK&Vx?Vd1sy90qC%;)2nGd38lh@SlQ!5S#6)u)9wuoz_+Dbg zA;0OsIrp6J{qDW*J;CX{_kljDkPJ^%vm9X5Qf-I7r5Z@NY9QsZR=Ti#5qf8#WmypI zyMWE#gy&c3=HqPd&=didOYX_p{Vc>bROtp`{XEFhi;%~ZqpE^K=J}c{Ce!oz}a`A zkh3*40O06sLkk4~*6!8-+}$Rb_UiGO_i!;Hu$9eIoDPytCQLy9DC}uC4(u{goEPx8 z5gJqA|0d{&Log~(qjRKRz9I2oob<$NHl8?wrOy86hDE(K{fbXn;qpEh@=FfS3R;#W z>^-&j!4qAnQ5|J<}>x{LzbO5YhD8Bg6fbwkhbp`3X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1e!@iK~zYI&6jIzlT{eUf9Gwtw%dBy*0sBJ(6Ip29p;+V$SI>(=-6 z!@wws+Y4Xt|LvUo^E|)jIZtxV5vq^lsI+i5B{(kKRe*o!jzK1qkeUAXo~qnAi2ioW zq3dwwYhmG9$S>C(TWFaPRe@6nz|#einAwvA zC<;s)@=z@E$PV;?3K<0?34{*HYN2^26uIZ3;JCJq2#M9Z*RsOXPL>6NL*O5TzyNr! z#*ueD>wEbgto!aG_0YC4P<8qv0D>7_wss9c1w8uFgmQmTvv~?xe{mX zjQ4DxVCUXiN^J>94l;IqohA@X9Z7q_w8d)4pA2)k(@9agi=3}RbV^6CF6cxELHD$s z)#*K)e8bM!0vT^YM_*ShrI`szO6Sg@sUunX-*H(3oQoKkQY0E{2080_flxY*P8R?X zV>Dsp#O3E{PWp%&qO^}2u^WR}a{thhLK{d#Zzekm`}gmqNYPWjrkv`AXK0@HAeMrC z^r!csWIcv7y`6{az#TR7&cW9)#1!HNizX0FN0ZVU(S=itc-_1kY$sB)nX-Z$0Gv9o z7-NhDlUP?(qx9H$?U>4zbR|i@im5zT8_3(O_m&64vzwK4E?Zq404$jrV^E!BEYV72 zT*72Fkz`DF>N$g(1oSD60q&jvKV3&^9B!i9DS4 z5M{;VT=7;@b#$28`_I!`u^pZFB1I$Tk>UYXT7F=%3$9Q_MX8ShYZPD5tO-O@N0O;* zu6Z16+w?8(iye4G3GO$K(9r)Ba=`-Rdp1&Ec>(3%RT7wZj~zVv&^KHeaFR-EyG1nL zzHJ@Vyz=BH{L;Oc!>&CnA3sA)*E!r350FV`ajjpWcm91G9NmR=vBFDFe8#7zmud}< z*wMV*+uLJz&Sfldh4}E}&+)}dxX{yx+B=3JDWeKKpdh7XWJ@8A6*;V`{~0kQ^Z2e7 zyrcPZLR8lUeBzj+F1ge{Vw%mU3PH?f!I}z#Rb{{j%b%TQsHvP+w{8PTV&Ab=TtAJ_ zc_aJX}@un9x@Jt-9oN$+y*!TQ!qdcVl&D5I6O|`A+-=BL2KF2XVB; P00000NkvXXu0mjftLIEv literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json new file mode 100644 index 00000000..d19aab26 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ee@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ee.imageset/ee@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c8765b4c4e43e5ff408755b79591505c55b7c5 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx8a!Pb zLp(a)UR=oAU?AXd(P_uBHWr&n8`z#*OLX$6Di(A?ed;_?Wu@sjqJ@efgJvddvX*+mCVjr2DG(JEexKnelF{r5}E*bTS`#? literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json new file mode 100644 index 00000000..0702c3f2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "eg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/eg.imageset/eg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5768de7e696d221b6672d1473d8a83866e28ee5b GIT binary patch literal 401 zcmV;C0dD?@P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Y*tgK~zYI?Ub=j0zni-?+nAbfP!Jg2!(};jiJ;pQ42pnyT;N6+~18aIxwzEi^>JLg2L^WD-`UxV&Rf zWj{@?`Gml0V?Or~>LCKJjc)UitApYW4nLnU9eqGb1w$c-2zuN>>Ewpx5%qfg-f^7Ml?Tl%xseRAMt`SZ2*S$G^dd7NX@{%2 v27^HZ0BQhe&4>RV`ETNoC~-)XI3&s+VAGL;xyoX100000NkvXXu0mjf>*KCw literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json new file mode 100644 index 00000000..df44c3f1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "eh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/eh.imageset/eh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e7fffa4463968c509dd8bb949e9663165d994458 GIT binary patch literal 645 zcmV;00($+4P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0y;@VK~zYI#g<)2Q*ju^fBR4~XCKzcuticgrNfz4;;?yD2r?mVSh@XO|QR1VU>A0m*EZd_E}_OYitJAeqXf?Wd*b zXwsXSC=f`h>g%P!!GAmMYDzxq{JiX4zbwV$xj}w5xM%VLNsVgauN4%m7N(ndSF&eK|ibT?v_M%rZ*`%$F()cfFay;qh*e89XfzaAM4>lXLw}amghuJ^P=mi;Hosh9OaVn5h3T31=E-AVY zO_)A77^@#)cedcOqj0Mk=B%qh&P(sIwvLoQ+gW&7TQGn>$_Ub11=l<aSw flVwyH$N<1^yhw9Ly!da^00000NkvXXu0mjfWyL6e literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json new file mode 100644 index 00000000..5580db9f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "er@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png b/Passepartout/Mac/Flags.xcassets/flags/er.imageset/er@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7297a1c50227ca2255e212175d1b6f1ea34f683e GIT binary patch literal 1176 zcmV;J1ZVq+P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1WidqK~zYI#g<)6Q+F7~f2XG(mbOqRTA}i#AOp9VDUsm>9m29?35qjb z>?6xAc45qtxh+||(A_NCh?~1vvL#;a!erTui5Y%`Y$`G*Zb1A*Cq-8ZiY=6Wp0@P# zoLvybYOxH_Jy++P_niO#m*;)nbB=JxT7CH9N@L5}wPu_Z2L2CKUW>W4IsW8iLuZ(V z&M>zeI=bsjoLOffn5}uLFycGpZxf&zz!FlZ>W|Uf5u)OHoP#b$^tINkeZ<7Eii$X+iFnDWdQ+TK8xWLBLX5NPH+rR&_p_E;nyo)$_)c zD1AbN)9cNgf5Avn`}nO(3!=+6B2UCA`D_E`H3du#h43A7QucKddWQvFo)O`_c2?{k zCv0F|T9*>myDIs-5z%U3@%9=fjyMVT-e$qFJSL7061jK>)3b}PZLTCKCD6qb9K8Y7 z{T`;KN5U9W@Ywal4YPMCe@qTO1fnm>#<8;&MN07Z>jw#(bYXhlj;&=mzV-nk7d(W{ zjUbOl$*C{KSe{Gdf(Iok&w1+7f|Ry3l2wsMxO;@)88_yYc2rd*I^d&tcRk1o{*D_U z3M_i_IkXE+sBxLdMbEv31r-*0WomjPUOo|Gp;tySiTG^kBbj!5jTJT~jtw%r_w1BI z#W|GiZNh)zCb|L>vOfkuq;C}OPgg10wHBXw=4{M%>Qc`1g%%K0664bJ4LS`;Yfll2mS2*aG0H6d073Igea@P15;yp(Sg=#1a2U$>_d*2fRqQyYm9YoCj52GuJBU2mjR4Rt%x}WR7u9XYB82|#f*N}i|mUch|}zbLKAws3F-VD)X8MV{gv{i zBsaZ=+}eU_%S)-HfJ_{5VryBBen}1`dm6a$@vnrsZvn8N%u4Q#)p&lmgumkkw#}7T z>WUDw8vLCul$e}$b2ZyS^3`VKZCg-QRLuyP0+I~I8UEr7MZ4?CYkh`5*AS!o`xxEd zN9B*L1W&o}9UVY#H&M2)nS@tjaQjgLUGCIXMUmv18su$TNN!vYI$cJ$9va`sB`+iU zx+!aGqV&s+Ab|h)AX5Jrx4-Sdx}k)kT`wVs0@7s<(VKyL&pyifOcH*h@@E0IK3LG0 z_1HEo$FiybLun5BqHHEd!o-|Dq$?i$Ctbu{fmvJsD2eBK-7|iDmGC6q1DEk0xXhAI z)?$jwM4f(y_MDow{)5?DpGg`2M*xP~{+NO*UrO?$_vd8&V}s0x^>YWAL+a-hX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0RKruK~zYI?UpfW0znjp|Jix7>_P%Y*T9B=-GUZ2V&MUD1AA|vckl)t zA+-ldwP{2JA%!RkqCrqH;yODvV&Mhe6!}l^@jm{aCoVtX5I`He8G6hB_t0q~pM?>u z5T3%5SbUThI#utSAVDKrx}zp+nYEwftQV1yT~VQ<=Kz|VAOPm>sM!v}#H@LFRGcT2 zO=VH1iWMYiWF>dhl>7P{_K&qSfJlj6&6yVh0C1+uM*6UpnM3&h6aN@eRrBi=EbB#7 zobM>==^21JCkTLT%JWSX<*Mj3}s?11H2S cM`zSr0gekyr{_*nVE_OC07*qoM6N<$f-CikyZ`_I literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json new file mode 100644 index 00000000..83bca3c3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "es@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png b/Passepartout/Mac/Flags.xcassets/flags/es.imageset/es@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fca4f3576045adcba9a95182442e7e20e82a6b1 GIT binary patch literal 579 zcmV-J0=)f+P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0r*KoK~zYI?bc0i58V+c{A(I716H-^IB+i7>nL=rfyb%QXqx@5akI=o3_by zgPb{GT78|4Ym$vMN$3uyZu^Rv3MqWDXcwUS!-bfjDT7#dg51CRk01kEP%mq&B^n%t z4Eo6cLJV;_9@j0K`f-40(jyd6e;4A8plX`rP6i~u>Nwve(WlSQ3>_n0qW0|-_Rt~6 z&=<(W@zu=;Qts0HqS4saXk`qPyMbHE(i`UR>?c@}OK*mRL)bp zeOF+R4ucGEQLb_Hrt2GI;-`sc1V5`mdh2N-N9QxKi!X?01_;AKt=vQ2-XYYn zNN?L5e%$B7ndcj1;wx>fR9Q`gSvFd1Z7RAdh$l`6?NrdDi_u9E)BFBGdR48hX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%S=Q(+j!@&CEB=TIoET(uyVP!Mb+8bVA!5*7wr#KFMi z;Ds1BSK{D+35&CCx~Lmb2NR<4LP$hiBp??>sjW~h;nM4Yp3@!|Nld363@HQ8{66`9 z$@k@Zg-Z{dvr{qs1UZb?A%{d&B0rZ10J|vUiMdAX<`9yZLr7-iy%tmHLbj9jm}v!@ zyoh4|^?wkLBFB9N*%x*U7Zafy1jC(}rbxLOCb;dwr7m#VbDz@u3CoB|Ro3JouX_^6 z>Omv9$)SjQ0~W6wZ~+vY03$s;kUJ zj_n^r5=;P&s$nKJt7$9!jzdav${nPmbdD$fc4i}YOW-t6`q~ZXvAa zQKCi}@I7ZbQb8bIOh@@FH3e&&bS>^51mJS*7^AC=lqgXOX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0!m3lK~zYI?UqkS6j2<JM_GeAWLAY0|zO|TFyciP|Jx;oFM+mUkTb$O0#4B8A_ z9Vc9~fs{J;E=_X(@++j&3D;~8yEaZ^(Dn@C`9z|}mx*;vF!K5$02dMuD{GFUGtfCf za=C#8JLoB|rrN%TbcY|VkE4eR6pI2`(kV*ui^ne{LUZx^CAoZ{5~Cos_H7BLn2it7 z9i1bW4^VLYzd-;LrJ&&W$>jrdN9UN05781%scfP4Myzx_K3%e&uU1M5u%55Rr%SAK zy^>$~YW7%aR}%>@?|28**lj^tLn}-vZA3&5+9n z_>?wDrW(k8SAQb_ng;K`p5*Q4Q^?XkYo6b>w>G7Z7w^t{0w~K`HL+GrC9m?Awe#!; z&mdl6lt7xz3}b!6^ma@sC+_W-VythNW;3JYS887&T$&7c20d*vSc7qz>g)=n5H0{sbvD*uoSwEB7PAIc##Elj zo~Q59n!$W3#DZOm5H2t8KIQrCCkWxPVAnFA3bC|icunhl`c8g4&6P(F0FY8c*CcwC vR;j$aw&x&Qb>ngWZc_mN(XZkG$X5LXH6YL{K^@LT00000NkvXXu0mjfyJ9S( literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json new file mode 100644 index 00000000..126a96e3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fi.imageset/fi@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..99ba758f171579164b4a60bdf5de0be3c03bb469 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx_ItWG zhIn))|M~y_e-;~Cn*f{5f}&S(ZGElo8&2iE?N9o!DeUO-xe^;@bp{EqV0Dvi;)7wf zUS|p0&(rVO7yjJHWaoOn{$JvckFWW|Eam*n*uun4{YhS_{=4Dn@BaHb@9qC9+@7F+ zzdrB@2OH3qeET|M{#h#|OF670O!yKXK1ukieByLt_{Hz@_e<9O`PCiTC$+P!yZNiW xvf=+3XF&h} literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json new file mode 100644 index 00000000..ec8dcfbd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fj@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fj.imageset/fj@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d080bb480233d2c2a79f359b8836aeb12bcff16e GIT binary patch literal 1181 zcmV;O1Y-M%P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1X4*vK~zYI?UsK`lyw}(U(dsH=NfD z<(il#HA?5~A99oxvsTlY7O>@5<)-0cS|*h%(WN99Em6j?@k2R&A9oig9C!EJJ^f*! zl+p&#`lI)s-|zeLd0wCQ_xbL5go=zTSyNRNqJQx@_Oz-weW8YX)tH}&Yun32WNl(y zil&^Yhoh9 zIGeMCm(Cr>RZxs>)iR1!ZDwUr#mGSb3E-NwmDGj~a-Yp%bKPa!A0FjMN+LhLumM51 zYhIBW&sIl0zvjJ0FfyFpyj(KBsOQ$ztB4^XqXH3%zxt_n?z9-g9}C)XDkkYwDE1x* zDtK*eG;Y{NMAjyvc4rg3-G`{x<4|dExIKf7{Bn@OcHzDc`FjdVgo=zU^0*%^k8T`5 zP)QVhc5cKV;%EW>DM|jv(gT*1ga;<#yJ^FDstoPS=@^$TcwnQTIJ%jnLvEc*q(4m5#d7=|U1*YLp--EG^HdqSIf+Qim*6@6IRq7?<%=n94^rFI34j8aMgbyL z+_>dCarP?seZ1mrMto)~j+0-~nV8IyGtJ!gcn8hv3omfmG7E2ujjnCG*m&j`Pfj** z`nz8!`MP>EfgqXmTJhbibdpMssDeNsIK=Gr$?Pn?$o!;P6zyG% z=fDRfUVDS8=eLm4Fw~p2FNX=PCOlId_5FNO#i`*|}#r*CK?HlOG;J-t5aM(QF?T<;(>ekw`vQwI&_>@smrWzt}d z!>lut6g_cp??{uE%GFt{o}G$hw-0ID-_p$ZkWO4@QqYJ3u5Le}vpsmqeTj zFJzx@D*_c&T9S{J!F^=N4US{^SVtLd;eTRfqibpi){^A`| v5CB4r)Px$T*?$;#@VoGz`5*ZoX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1^r1xK~zYIt(JRGROcDSf9LEX7g}$W~Q}uqMfO^P#qF=vlG!s#i|G;3K&sv5!eNni-=nhmfNz+ zE@#i_A6kq_%+$EgpXWQz`#$gGd*%}=Ui$fX;xArSJDy1(FYho%kJj^bbbXS>otHBS zf9ow)pVMJ7-JCd!iVEi+KMN)FUq=XjdmA$|Px1p{6h9AIICAIHL%6s73d08*Fc`9# zK7GpfvL;PZ^T+&T%Hqt-v^6vL^l6UwhWtqi%#(qWESf;A(9NIXZFcce0*_~xVW8^mzy6;1c30*J)e!G#7^~p*bk$% zwcIK!M7wSsVY#^v4K(8NqJQ-iDI1d*b9?`<W08}9%{QX1+TXIqvt2{t| zaWR(k9NyU7KwqB&fM=eKpw%u>**?z7*~0_{1)^>%_=;uZw;!am@HqrgK)I*;)9Zd%JG-%T_E34L zk;|>!SZ)na+t7r0Q2h3eq(0#dXiHCLY|%3EoN3g&Tk}BTQMZh!)#4GFQ<+T{=w zIFUzyY$FKkzq9;Dgnq$HTpL%idY+ChOEIPAKSrYoVOPQmjJ;N_wbY||Vg|3S$fLM* z4)cckDE-qh@b&dos{~GOiRI~O0Vs~QY4mrXS-y&?!{^vMGmp*|6Or+&2nmlN-|c1Z z;RZ_YamDYA{D`>G)sISml^-^ff2xg`+}Vx@eBt#QN0FCwM*` z4Zyk5CeAw}xH%&5M!+SKwS!c3OZ?}$naxpdG$UP<2?^Eu zZ;<)h^e536|BC1zNq_4oVZk2WV;veHfTeym;^QNzueSj{?nqKnBo2p*+V6j+nyWM1GpC&mu zmg`rqvFpNBo=aW8&2}5zt=-I;<}oz-Zxk(--DS=n`3T84S?#WX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0pUqRK~zYI&6Z0`8&MdBpP9_W;3Q2GFDOP0r7cPu6c;KY6a>MgmyOVM z3w7VW(iXZcU6mFWVxgPrq8P!2ctPEGs|MpG29q>n#)*p(LBULNPHTKuXL05|&wS^5 zKaTSH{mK^wWsJ(|r&?ivD@lXsE(MQU{(qz$p0#-C4Ev-(G|>4w;LT8opieI! zB$>AO_+yXF_#dJhNg}OYG*{`-P*sJlM-TY5cFO*-$%pU1i_RIxtC?9z5Zy=uP)a*Sv(NmXR$Fw4YH zGjE5(9GsrZSc!uK42_pB8p-BtOv`4xzk%8!bHYi&SCdFvyqn&o`-vZqt}?rt5QdNf uDQI!)484p&_uoLwoQ)~|FuT&diSH#sf{#jb<@f0T0000|gW!U_%O^81FnW8s zIEHw1Cja^W|GyR+TU!7dlY?S`X7l^zyF54T{frENK;(p-yIj+LEaf8@f8B zmIW~PSh2{$FppIGhB>>wb$!2lJ)TAM-;b~C&ToF+&gZH2vtM{aFh}RiAD!CM`daJn z6i?S-{x-Mr)Q0zGg1clNC8#VtYH{2Cd+(pO!H14yJox{=x$*sfe>Na!yWVq$$6g{* zql|@_nfb6Y=T?0knf?2XPXGJuu_^81|9DA>f5As(dEVF6CnxcSg}Ky&2T leH+bQ36vPXaE1&ML+Ohc^}lAPbb$fQ;OXk;vd$@?2>=kfsuutN literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json new file mode 100644 index 00000000..237f832c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "fr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/fr.imageset/fr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62d74b4234bbd0e63fcc2d2c282acfe986a5e93d GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json new file mode 100644 index 00000000..f3f1ab6a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ga@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ga.imageset/ga@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ede5241bd30a829b8d22f4b7afc71bdb3d2ca9d7 GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxnmt_{ zLp(Z@&)hii;l~|zHpw|gW!U_%O?Xxrg*wI zhIn))|M~y_e-;~Cn*f{9fl9?tk$n$$-+m%-_`rb!8)kLJ%)P?4n9q?N8SAW1*PrzB z^E>8Hp6Yv+oi^?qTqg|fed??F^Yn(M|D{}TIlG{cqq|}MZ(+IU;!TU5 xxjs)3+2>NJSJ@{ZQgO!O7LNlnvaujG!>MxR(w#r|76IMI;OXk;vd$@?2>=M5RU7~S literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json new file mode 100644 index 00000000..5607c743 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-nir@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-nir.imageset/gb-nir@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d4aa5abdf662134ee11cf30fae3e2582917e60b3 GIT binary patch literal 681 zcmV;a0#^NrP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0$xc(K~zYI?UubuTTvK?pTyjJ*0i;W7cG7ucGIB_1+{-c?I6W28HA3~ z7QsO@I%Mb#f`U+5bk9=BR_xkE8cJ0v3bkUZq(N$~ny4`vV{%W2QYcQ|b9M6vXFKo1 zb6(zaI3SsMh%A8kf6YTgmS>kO{Fky5N{Us=C5UXbd-?sqZCS)2Te$i3euwMy2wStA za?wu8U!ZjJ)r8Jc)aY_jc*mzZhQ@1T#X*Q)oy%8CqDrp!<3$p zrjJ_-o@XPEjD~jXq5zwp$d6Bck>yE?2oU=(-q5o89J|B8N>3k(WH$h8W;RELh8mxQ zLN9GL+g>pi>+l4FT?ZZy`PEhKHaByePJd8Bq0hkWnVFf_nx-W$EV2M`py#3mu4t5& z;b8z$b921!>!WIapPr2k6sHq_m1vaW$cULU#!V0Fv8It;Tm-<#W@$<$snK=5&&~p{ zv%Jjl*qB+Y`CC(w&y$**1fZBoaU-9n;Bc@Pivf@vAIFi)UA;)z=c9gL;IEXb;uV76 z$q8y_CjbqDgOvULs~7Q&j#Ay$20(pxHyMuyy|R*f{rvz0TU+sk!=^6mMS>#w2ai!B%5x^z<&@L<2BIk20az1|mE%M=CTM!ik P00000NkvXXu0mjf07E!B literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json new file mode 100644 index 00000000..fb0244b8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb-sct@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb-sct.imageset/gb-sct@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5ae41dc66c88b58d9e90301dde47df4cb0bc91 GIT binary patch literal 892 zcmV-?1B3jDP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x12IWNK~zYI%~xMYQ&AlL&hF;crm5F~MkppYoy1s8phS5+sDQ(9rTl4HlNETbQDll%-R5b86e%=|N}P?$xN~v?R z-e^YAQ!QQ%>GzaGc7hVmuBs5Aknn1RTQUFfk%_&W3zPyiZ>CVuIu47K$JH%J7=r5D zaFm}81tI+U?^TP5X=Sp~j)eF`hO#n8h6G5D@Wq+90CedVu()jTh(xfz6zwI6$WILv zB%zt)ko$0`lbMSwIM>ua6GJI*Jkk%usr#^>6oqL)82N6**Iz4ck;qO^qN6McQ9*KE zjZ)yjyJ_Ut595cy^ofDGD9=g}(=)n=zHttju`Il$jKdQPE=)I{%nDW4u zB!c~==qW#n+c{wn32332Y_XVF}4TX>KdB*XW)rc87dYXrAbg7Qt$}a zOQAQKoy%Gt5dg4Kz#XYXWL=7eE79+xVj0wZz* zjELZ6NdmIs1NNSXSVT~j6Nb*RL#S#wz3JKau5^+C25)x)>(hl!%)!?aXYy(go z>a!EqY=0sdDi)fGWI+;?0<~|aak6FrC+-g5PTK^m{2K+*BYg4kR*Flh1nq0fik%K9 zcL$)rx6Ze(r&$5)E~^|)WEWYn2@kVsJ!`}w60^&!aDYv!fvF{A#*|NxyA37|C+z@HN%e- SmyU`60000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1(QicK~zYI?Uq|?RL2>|e=~E=o?S2N3pU0n#>QDLxfn0BiIOyzhRZ_< zN~A^>X%&S^%|&WdwMkJPLSIU0(}%VX=}i?hga9fMRsy7<35k^0R7na212(q63$|0+ z*j``u=DnRg=S&|!Zd_w4eWI26f1R1{`_1?NG~WoVbqmnU%~gxM$pF*(-v&v>#^zm5 zjmAhPQ~yy+&d89IEN%^w{Cz|I$F zKhQ!+xSpnU4}Niw*p+^&!^;?M{Ts1A{E6XcFJ5|zv?*yAN|N+!BFA>mf*9}aq2v2M zCV2W1HPw}L9Xvwv)On_kwGsZw3xq!hak=$lmOp&|jPtXsvHJ%(vEfNNPM*SiwwZLz zLiC1vsFi*KLLvkV|9T&pcw+iYbk8B$H*O_(`VtxKGBh&G z;4o8rkIbsbERfm_53u+<%~ZPrUw0p+Ih)M8f2BVlh`Ko{g^4?!ATv6K=enHx;ZC|< z*ol$Jlh6)DG!@byr5!%=@?5R2;_|6>0Qy_rVd%x5lTD@Px5jlG(y?*I#>ZIu{8obH zWw4|gqwW^^o_?7)5E2TvaV1qN!wkIr0qH$&Q6o(TyaE9s2?+xM)JZ?ZHLGYmwj0B5 z(Ra3!^o1TWRUrb|?EE0gFgUmEr;yIj+7)H!&7AY1~3xmUiT$yKJRU9@7mXa5KuF2JCx6F4;1`mG(j+Jp00J0T93nb4LS{HdGL^*G z{tVeff}mlrxbe0b5VI-*5L$Z&iyeU>uQ85Bdnq{|Wn61a1pjagsQrg2ym|mpEHbHG zG#WpWm{+7yny{#X+g^GGtE?2yRD9``ZNxwLm=e=MmWF280$}XwJvva~3$;!6$s2Fi zR#gR-BwpW_Yu{Me;T>tKUIw>&Xe=SAkOsMtN#bZM1O^Zg21V`Bp#1c@c?zQ=SlfPy zjV5%xO69;7f@$x@>DFAzhG|&IV{(*@VmbK_8R4NCA&tFHfzsaDcG# zbE(`Vn7h{TVHKeDPWZw009R@>i4usHKt^dI7abaVJW`fsaOn-FO8308=Jm%+0+|B8 zZ8q8Ys~k;JCB!X{6D#4=SKxG{gx|kXpl-+`t{ozSif_DU^T`^6Pw!FFaenl(6nc^3 z%<8$*%?pyMRQ%>!7EMuyWl6>MXBEK&w63%81fT>jzGU&}M@7E=UYpOqb2=CIH9Q!fW5QC@hdveOAPB;CuV>+~S%9U6XLXOWBx9a?y>e zazl`jdXqD2Y%YA&M_WWvC^Koi;82trfaqNT4(8!v#78!y5FRw0wJD!)7+v6Fyx!z| zW07-rEBeAFMFXnFT`ES4bArrxM{c72|9PIJ{~C~g0{it+@K`Sk;s5{u07*qoM6N<$ Eg6|H`r~m)} literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json new file mode 100644 index 00000000..16b9d117 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gb.imageset/gb@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..097220d68f777cb3660b2b31a1860b366827f797 GIT binary patch literal 1250 zcmV<81ReW{P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1eZxfK~zYI?Uij%R8<(q|MznDjRjm*QSkx`qsvH{3#76}@-me%lcS&& zj!gm@!}>Bvl7LN$gN_mzYcyqOXgP+7Nx(3bI=qOfyP04p>%wBf?6PhtvVgKI3!XlZ zn=4chXnp86b3UAV&Uv2SdCr-0Dav=vaZp%_5hC@SjK<1sFe(e6&&qQc^W2aCpKU1! ziGCLs>RU$|5};5;CoT{5^bos@e9<@~auXmiHq?V&5k1f6TFrK3r^n!N3W?kV$lUM} znvSI)(beKd1AvP&4{1p+;OCkh*t7K&O!aVkWCE^2KGGEn(Rh3#R+*b|J!}~UPE_(} zrs!*zZuKPqfY6zXp}P1&{1B2n}>?gRjmTghXqfNdP5X_to-<%9ccBMfe^#v#jw*CPW zmR`W-oRXiY_xGKu_h!XU@wp77epBE*V1ZTB^hfad!Qf1pG-Str^^TA}8_bpGKzgkJ z0A`{)+@76dufRP*pf`3vqq~7SJyw`*c3x+mo-GlFhe#a)3jKXYd<4TmaXE003jfn_ znxY_K#gMRK0Kkv+ts?4NR6-A}x+oY^=CLAsvY-A}1s>pkk%#%uh)^}v^=8eX36kg#HK7$^HAi}o7&Og9Iu zX&Nr`WT5#x(0tyIfE1qxMl|$y(BE#x-OE~gpX=w1TO4P!7}{aA^+RtochOsN%XAfI zwU7mPVTQ!RF45D_1YN==)IYNf+NBDZKKTN~MToL9+98P^=1{R3mR_5^&rB47=JQ}w z7C;-5gv)amqc3YWW(g^1bT_d5!*BJdI^Sp@4{-NNBWa3%i>TaXMCC3c+Sv8PeDMm| zcjSBGx8NP(ADKxAA*3z$Q=$^hc4)1cNd4Iq7YpE4-!Q+wo zPX6190D$qAPNZZV!_JSs!<(z0Lvnm11bhx$rdZM3U3X5FL>RQJN zBo~fZV5CA5BIIxqds^s$;6Q7@>7%HLUXGxYFAX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1P@6>K~zYIwU=E?TV)u>f2Zx~7hmlB(@GT?Zna2q+ODD~PZ)H7jYQBW&fs)xGo#HxN!F+gJ_=1P9Cn2h7Mz$rg<&2Hv^(0Q(19myjJJuoWGpg|4E0Y!I_y#t^{11Ef}NleT|}48B|#O)K08d@@t4q?^*^DYD8mH;-1nK_aLFOX1oc!msj~uT2 zi_y*-I*4rQ@B|s{^yPebW(09tWX?bK6JNCcylwYnQn4w)spfGmwvSM5i{%H>S^hU8 zPy6Vq2;4P5T3-i-ICS6kzEVI+#Q4Tnc&$>pIeDqnBGccteROrj>XKzn876S}6I}L} z>WK|1s+t-=gOI$Brt6S&bBa;;M3`VlTo0oIafA{$`t%oMgI&W~rLyyoMBpX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0RKruK~zYI?UpeL!Y~wuzle)li&xMS2wn9+-F54#vw8_VLcD-O4X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0gy>VK~zYI#nw+t!f+hN@%L{oY-yM%m61e2hY~z=lkk*w^U$Gd)Pv~W zBj^;JdIa_)f{36)1ks_i$f7?+BBl9%TL(uM)7r%C17oM(cazDKjc|Udv0w5W8WqY9zKTGCLyt4M?Bm{tnueSV<%I25+^^Bts z0Jlq@bE2vah!NYX>IMPqt*R#k?5pZeh>@;UNqYOT3j+LJRrIMz^tov-1Ujoq-qc85 z*ZPLYRu;A1BxUok8ee;Tc`seb0UaSGN*dK6!Cu@;e$@2)ncoord0b;`tIqHzL0?4| zV-<~XQRN`!v4pS;0T>Facw$WufBncOWC+AFj0(G2%<0E*VF zk_OhzF4XG+tqiU}``c9u0?7*vnY+Z%jB4h$LO|N`jtIB@gMcX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0ntfBK~zYI?Uuhw8(|p7zxT_Fo?_DyA%mgV4yolJe}L&!D0J%JV8_xy z=3;9RO5S(T@L;az6COZd;6PWRlt;F$mQa zNCSk-a|;0AzA->`B{7JcxD!BgS8u&{^q9&^2DwP3AYr8-VX2K5v!=JVFVqwqH@Lae z`IoSl-ikroyKAcc_n$`d>o zeaNF{!-GR5ej|N=a>o+~ab6qTHJ&%$Z(^wO8vtO<4a57a#n$UnHs4Db&0AV&ydx2O z1+-Foj2s4H3}iV7>c1il<=ibuMt@|^`v54nBYJM$U?8F@3CelDMYXI+M-xS22P4D| zM(C(qq*~S_=iR2L9TCymwK-@hNLVRISUrJg4_ND6W-*oB)ze=**%F*rgKe=Z2cfzG ew_+q79M(VXr1qQ%WuvM90000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0aZyvK~zYI?UcVu0$~`(Kc}z1GO=!nrpS&Gg95jln{H!0HbV)A;InO6uOMu6%$)p5#XR~Bd;#=+hQe}O`b#H)&iF_a>wAvOk ziBb2hwuO{l)5f?XrHaX_CeSZbs#hx6jG$EUzJ1E^X}Y$M7_PZ}*lZZ2mLdd$qls9S z6f*iY5bcL?~6F`MV$B|PTm0!2w=1SIVFey0000< KMNUMnLSTYgt-hxK literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json new file mode 100644 index 00000000..9fb481ba --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gi@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gi.imageset/gi@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..949bd7424c4a1bcd2c2c46034403ee05f32839a0 GIT binary patch literal 861 zcmV-j1ETziP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0}@F@K~zYI&6Z0@R8bhme`oHU_d~NXtp-Kh1CrQEs`b?~1^&UWD2%S}Wh5u9JX0-#SSq@=u@8SB>kT@b@C zXx_FRzXf{f6s%y77Y7gHi^T!ZLP5NHcG1()iu1!K6afoQ97UGxO<@~Ek|Ywb7|F&f z02DWzrLd@owpcp?sG2sF;LI|*H*5mHTE7-alI)hZ4Kob34=jUSRSPGaa{iTr{9#7)B#&QG32?pXuyC=Py!PFpfFl zFs9ds+22obZH=8N?18vLA;RtoK^}rcZ(r69nK8%(bRJ@&C<>1;S!~5wg2FRQlz5z0OfF>6tQmoH zI3;$IWFJWY9$^y0q7RFQLq~WYN%oMW!)f2lG6qQv`O~n81p*_6kkX0P9U-uM8O0TI zM+ebgb;L$Xa>c$=wsS{1b~d*ns~WP`$CJbZ5>k@t>ZKT(isADzbz$|$*mob$dV2p@ z-)Mi`FWL#z0~xE~{`&*@>5m~Jsa5d=*^sx+5MS^CJZ zCN>NFZU}x8jDME(Y5+OB(1ztN5a>#75Rl`FjHR*$F@d%%1H@-oqvrlq5CFHv;0-ti n%DP7+Aap~Zby|47X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0tQJ$K~zYI?bbg`6Hx%i@$a>bgMi?_!9O7`u1+Qz6BiB9!9^nuPC61X z@z27lQG=R5BC?{L;j|w|xa=LVe#v}2)rK+itztt# z&9ZR$Hu~f=d%HV8k~~RD?h#>_%(Y(mC*tpat|#BaGSa zwSfrJLg^j$R3VLYUTUpD`K^KNBu=cV)P?!4v;@@fA`tc2ove*Mvd z&1)achZ$c8JEc~ID5msgRWhC-*~plub!(5Wk0U5d3%O^oHV^>$;Sl=!&sCQt?(|_q z=W7QMrp4U3t1M5)To);QBc!^XdP0(OSM!fANKd#^N^dc*! z;{Qk?mnYtSi&WPDO|2)WJ9L21j;#pC!Hg}Cdp&{n>=jOa$uqzeq!=R>Cwcd=?~7H+ ffAg!j0a=|ti?Y|gW!U_%O?Xx7I?Zi zhIn+oy}FV2kONQa!}5v#c}lGp(wM?dXq-95bivS-&Ep_bW(Hr-y{9cN_cpBmpuh7! z*XcF}e#Rpe?_{M;Dq6L_;CMVk@X+-T#Yvo+h7FT7SrVeAm9Gkoo5r>1!@|nCd5keS ziVbVd>a2Dy;k#(cyfAn7vc!bT)|=j2UNrgotbED)$6hs$YfdEo%1#nDo*HlX-*l;1 hURtE=qT-Hs{4?XSYdF5ma|F7T!PC{xWt~$(69AdNUSa?M literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json new file mode 100644 index 00000000..da6fe232 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gn.imageset/gn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..88f1362d20f9336de141f8212eba8e0440ba5a43 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx!aZFa zLp(a)p4%wskRZbH@UQ5x9;uLpimn%$8UmZkPUu%n6nrCo|4vSI0;`% zrp;dX<@SwTmp(AJsW?wkJUJo7!$?JP5|1aC`_f!d|GN=Kxu5m1uRtppJYD@<);T3K F0RYNDI?4b5 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json new file mode 100644 index 00000000..2f251e4c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gp.imageset/gp@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62d74b4234bbd0e63fcc2d2c282acfe986a5e93d GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json new file mode 100644 index 00000000..b387c51d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gq@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gq.imageset/gq@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..49e1ff8a8851590d86a1b4c3587076b896b2348e GIT binary patch literal 621 zcmV-z0+RiSP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0wPI7K~zYI#nwM)6JZ?2@$Y-NCWa*a6QZ?2tb&V+bP);`ZAH-v?k>7I z*u|j;x`^N(iqb)JR=RYN4ni%Cf`YBmNlPP=N=j>*q~UTo-{x|cbFh`P7gBm+?pY4r z-`(-K_kD&F!%s&mM(}YE;ow*L+Xtlby>vXVT)gHRVk-(jIyXW|_W2KS2(Ym7kgDD3 zF9e`sb+h>M9yr2Z2*7%I0KfX8>|F4xFD{5*eNmIa!&V9c^@|m&n_BfXch9dPcBzcO z2L612*Tm9!U5zOnwMN5_KO%g}oMCkEK;x&48Or4{4&hCZMKl_L$i+QFHr76vuA`~X z?dcWXFBuJI6?KTV&dW?2QKm{EWOxWGbZ*axtu%#LHHRw`Y4V2Unh7D8FMMNceuBw` z8J;grc}4)JyWOy?RT+P`#{J=>3(^-q#@qfoNNEvI_Wl#3>5c##>S*KUX?IVA5IBy5 zEM`#@kU=xg54_ z)82amMN!Z+jaV$^9a7OsCUk{&4lX1%xbbTi`KIxMiOp**v=6&h<6zYUKzcw}nM^^| zmohs0yE^IzJu=VOixJk%l84uNO3Kv{)vn-um*AlZCG>MYtemvvXWe zy=pmP8>C0(8J~NCz@MLJ1^nxU3*uKVwm}B7pI80rMSXq)oJP>v9U*}>00000NkvXX Hu0mjfMgAbk literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json new file mode 100644 index 00000000..80cf15d1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gr.imageset/gr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5e7314b5b6865b2109cd6433b9ec5e930e8099 GIT binary patch literal 535 zcmV+y0_gpTP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0nAB6K~zYI?Uuhw8(|p7zjt}hc<~ZrmNXbdT9sCm;tvWPT@-QZ&{c;H zg+hz|2}1V_lBE?2f{RNQ2MaF2ArMi7LIR>85)&JmR!T}kn$N~T$mds-%dWdd@NZ1y;dV+;8MP^N{u3H8t!oIB6 zBh`6Gm?o)gYS`a%kS5UzQ5O?opw(G#!$y!gK3!9A#7<9?t3-;lt)}PHX7*=14&4L1g7603dl* zLG=512l(dIU}|#6cg;gWt?CJu{dI%(t_cTZ;EzbYQb#PA?|?roj*LGGDm*-ZATo|A z4NIJstxq!m^Pdlj0Gd1``rIy!=?1a?fm?J2GO>6NODmT~`81Ob=j8Up}T zYnjX?n(c7N?=JN+SBr;;0n!8_+5zyE$A%AxbLI%!ieLP!-RcQDB|L6cWFNnsJRzdj zc8U-Q4w@rh-%nrq`=q#?5^7a1Ja$cc*z?uB%5_ao+bQAqNGiMfeH$R67j}wh4Z}Hq Z);r{vpGaW&Ze#!e002ovPDHLkV1l2P?9BiG literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json new file mode 100644 index 00000000..6723e58f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gs@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gs.imageset/gs@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..849c97ef2cc10bbf03c030a6d1e94503db7780d1 GIT binary patch literal 1815 zcmV+y2k7{TP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x2FyuBK~zYIt(JRGRM#EHKX>=u-GybBjj{_WZ}ACgkX8axwW75#4R)-L zOvjcaO$XEtlh{VB={WT3%x9 zr@pX|hLtOMc2*)46&qQxBJ)X3psE9grcRBe?47y1e0npqw&2*DkA0-b+-F+&#+2SC z#{)FaZ@F>dFN?OI8ckHDrlLK2nnQszGYHV*ejUrEug(`Q7yN__2?VilT-Q zf)^>R zFT&-sV3cIaTc2jxvNX=0ze{+yjyreUkCrSEEbKt;oE?#V8$BuI}G<5ZYl+B#$5zm)~ z4GHo!6%a+FO`CadUxPUMI!HSAo#uZYAPy0X&kVC=~tL z#=U?IeadxuTmC_6f{b5hqwG>T#l<6lD+ByQU%}e0Z|?lfkQq_^e(c%V0E~I_P0aJ> z5111Qg*bP&mL+u^96J`tgxuG0-F^otAfT5fqth8kF#d@sTM4nLHqLyOO?!v_A;`x4 z6*qM{DdthI=x8&qy_QQxMgmgJSDN{t6dK3b3kYLb{yQ7-qWEoF$8x^%~ZZv37)&2v~*4HQI)z&_k zTvz8}-n@zI+O?dxNG*-8zKZMML0tK3ShT5}`E$pk?%xGG{C#J=_zAteer7M9gDGINbUJU=c2B5LOMmBDIK54^-XVJ8`QL}h4ftD8T z{b~=dY%9a*{P$3$Ls?lZ)2DCcjW-rDE;X4+Q>Ic;ewFm3WRjw$((2QZ66wbm%*2Wb z(BSv`5k(P23G~I$e0$FLX!n7ARApqKosrFsw3U2!)hV3Ljv*l)NtP8pI(CdRXG-yT zyo`>E$6y;tbB9VWm`RuxVk4&0s{lM~m|ceOd=#t{ml1PKQ4Wlj(`zJCNmGR5b;#0aS_y{&l|z1it*?L8JQRHc&RZKPm!E&r*Rh+a}Cn%2Y` z_Z4D!wDk^ z0mhn|vAYun*hYo7a?fM?>Tt=h73<>)sM4Siz+eyn{1;a$yok4>9*h70002ovPDHLk FV1k}sgkS&w literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json new file mode 100644 index 00000000..8f49e9e4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gt.imageset/gt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..787d9b3c758ff3f499781bcbc209bffe65163ca1 GIT binary patch literal 405 zcmV;G0c!qX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0ZK_kK~zYI?bJO>LQxpN@&EPxCA8Fn9GY@X+rl9U8geSaK0pwyjeU{` zYHLiQC8(ews4GQOWJTr8(lSX!dbPxm+kU6ZL4@M|=jR-LoCA*(Up!5Mlt4$b(I688 z-Fik@Pght@6?M%@l9V**nruS`M4JK8W1hI%5 zQq?9-i;d4(llqSnbF)ODs$w-ekc1e5FXC`{D3)`ik7P`?K~&Eqs^p|x&0)7W+Xop5 z$EhpN$oVbqUrHR@q_{d;!`0DAEHWkp5&9Z{x%mY)_EzZY4PmufseKKT7@ZNlP8?!3 znHi5w1JKhIBpiwgBj7(Qv{q+8v>6a>21MI0$#`MNmW6q400000NkvXXu0mjfID4*u literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json new file mode 100644 index 00000000..570b9ab2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "gu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/gu.imageset/gu@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a63dfc15dda97ab7cf3a9103688f53180807ff0b GIT binary patch literal 949 zcmV;m14{gfP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x18PY`K~zYI#nw$s9AzBG@$WM`!@hMH1}M9--EMhXNh?BIY>JIhO0eq1 zXpDN%#PpyZOg!1do2K49)p#&^Xpw&sJY@lA-GNTxx5>{q(uQy2z(_sCOBhWFU5L$WjEFv`6C+aUYGZan8d zWBb_?Jil_4{;AOi3we3$TS8Cl#(&~{PRGAS3i?q7KcYuYa%lGV2LtJxze=+z;rrlC z&ffWvM1Fk15QkCbnH!_jef%ER^=Y!DECAP%Q(XM#GQ;{6 z)DPd`h3WH^g|shDqjc}V2>IFR-GM-2W^IE{`|1pnQqgsMk+M0M{nAHnoByxEq;h@py;e5&?XLV(2+0hnrNA$n_pj$?y#e$tQX$^%f&Y!H2Jh%;?{B;D1P zA-28&rfk;3gY#*ci-kf)Qe`iPxMdp|T&2u^i8%dMGl^t~rB9TF$o z4l|>LZ6Rz!?&VV3ekMch6ci^V$9+}Zg?I}&n*W}=uOhpt&ZRdYyAlh$@$X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0VhdBK~zYI?bN+W!$1JQ@qcVSj1k+qWE3hQ2v&Ro(aohGh;QKL3yAb3 zd;@0#ZVqmOvmin@iy|U^P>fYf>?P+?gq$6!G>Jq0+uen`AD0mAyfSx)rfo7rPCaVP z?spf4dG?oiV<~Ls~6)*HNh3JDOPr@$uaW5apQRs6J zcKDQ%hgcwib-#^{M#C(#ZBJ(d*|5sgN+vsRcgX(Sa~#ohTpH#S0M~&b_pWNEqefIs zahrHGOS;XnZgbXq2VkaTd?NsEgr#{e)s<00fTzUA8X>t90b5pu-3gb+SkRGC3g`YT zaU(4e(sW$bj7b3IOBNU6gVp{xGsvPoo>;6a<23u{IP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1T0BJK~zYI#g>0elyw}(U(X%S!QnkJ46JmP89$_xtRa7xrv0$A*|be1 zD+BC^QrEAo&D>I#HK&`b<&rraSWD3ykT;kz&LokvoHj+}mnh0n!tulFj(hIB=k9s> z!yzgn2P(b)d_JGg^L>4v@9WvV!irT{E#~P@j6LSsM`Pz1{-0=tI<2W9=F27DkRJUR z`DsU)Z?<3*O~a0&Ut`pLWp)LGW%)ldI_x)AroF?WlpMy7N=8^Eq<4lCt^&j$ST9)q)QW1Rx0Hba}Bw`LS*{V2&5A7X%|jz6O#7 zM=+7{hCLLY-A1ds`M!YY-yR#ecC@StJ&$z2G^0qAtRrjJH4@`>Bu)^304TN4UBHOI zuRQ(e6c(j?%j7Y$@CSX^osFoPI#iOHJ|I1rXwWlF6j@eu4JAxt`V?JnG1v}X8-gpB zvBqv*O0Y0*@;V-o#^LDxo2%aTL4));n%mPFRLO4jkUSgmHi{S{`e_ssKuQNwCUsrS zSkL8A-mnL+;t7G{4vyR@va0cEyNqXIkYBcnJRH;K1NKG;hse1gS@7snIC#F0vibr} zUpad3AkZsusnO5AZ6Ya?1{?t~5u|rPT1u0%jRW<&D5=@OzrLgik$rab7p3WMfBsDf@?odM5UT+HB ze!l3E*`IG<_KZP|f@v|tqxo-Yg=+*{y;FTf_JkJTTA@#^y-LfqsH z#uuq;KZW&N9=3+P$ch_)L4oXc`^mW`vm@8Qyjh_*5)V=am@;uGIw~#{Q*?F}jUCl} zT0;WyYp|wM=2VPARY5pOad-P`3=sJ`NEXzHnVf7njP;L?sk~T1Kvnu38xW*5sIt7x z!;2LT4G?3lfD2e+GUnz=~(}{i0<~& zxM}x(!&Iu84q!c;!3lc>8d^vI1A^>!``P4`*}hq1!5saqMR5X1?|~_ux~>+if97Fp zSbRggp`;IpUxT%sGAE)HDtCr6DWS&)Js4+#WWlAMLB$0tMQ7&Tx9jCCAZz?O9pgqdCd$wIU8 z6t?q4l-9lyvUo!V+3ohTp<8D2##l0!W}}SA+!rHi8myW-^Yyz{A70<4wh{o zD(Pi5R{wyl;kkPfZzvH~u3ypgSnBBUM;ygmzFI%5i}yw={134i&u;#?Wpn@l002ov JPDHLkV1gCMBl-XU literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json new file mode 100644 index 00000000..546021ba --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hk.imageset/hk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..975e73b0c6c381a5a6b29b4c92b468ef7c7d5280 GIT binary patch literal 689 zcmV;i0#5yjP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%l1>K~zYI?bg3b8*v!N@%LSFu`!7?2@LLybPEsdv z5ISWsgW#%vfkQUIs1VU1P$Ywc1xW-Qq|y#Ws!*30n>4nD#7d&cMBfT(z#fS+>!dZ6|cy>(NWB9H`(oNjLpqh+S)2cXoBcWreB_|Jw05cQq;7!qZEr= zq|;bD9&Ek6R5dnghN#{e_xwCMvl-E7B)PaqDVs$pmnj?`axgi`vv8QZot>92D+)&o z3w-eTP>MxW{Z+4s!QsH(*N4&R#634hc54e1g?9r3IEIF(YHFg8NKi;7`L?@DQ&UJ*EAc>pxBdMTkB_<2(15wMm802NzOJpQh6rkB zjiA%f8VXTAJWL^xK+fm+6b$lZb(LzDi~BwwC+q8+CzBN7aWb)(dIUsOpAkitc|S5j za(S8Bt}f)WGt!X=w%%THJ3EL51J3brK8M33Lm}0O9~iCESF+oA9*JP_c(_QV5cGQX z#>RNMv_vVF!%$z(rqf9wkx-AQWcogwn4re%Mb70w6w%k#qBEJ$na!6lQN-f)YHh3S z%W9~rqi%4Ja;bzMNf;dt_WXV_u^7cnhH94!0QvOv-$DdQA`^{L)6v0sB0)S5;3OIa z;7xZoPl7=tn~luore=udGxEEbT3V3vc?$8kHiVX2qb6tj`xV#TjQ^3pnOn%!{5O#A XGGEP#cP4i#00000NkvXXu0mjfusuQ6 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json new file mode 100644 index 00000000..22fd3a1c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hm.imageset/hm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f46c4ff6535a931f334d139b76fe609b359c5c GIT binary patch literal 1293 zcmV+o1@iidP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1j0!~K~zYIy_S7U)O8%kU%z|Ole;L7hneU=1kFOGOvktb86@F`ZY~0y znG9S@*j;^$pWeI765Drf*@I)a)l!wey9z8BN?)t-lGC1y- z)cc>`Z{OeN^ZvfRpWpXMxcv62jyKl7r<8|>wq^~{1!jJ)ZpKMzMa=sJCEnF}&_0lDtC{!e^`-0=gOGgFJFCi@Kzy+C1 zy0E_?c)mBQUFr~Os+gRaiEPRgnwr{Ze@inkN6g+cFlX=M<)urRxMBq*C3PG*a*_7- z?g8V9ia+V<`o~!gtx%ei|KRmkWgdl+6ypd8m`rtblf5cwMPm&xoK~(3rl=@|b?X+`jgeSFBD=jb z^Bh*hc;W;WqY>A|i;>To<*@UP?`%LD0M*q^==BX44EFaG$yuxaAMPsU{Qd@oVjNLX zv+(nE<558Y^!4Eqx19EK=dc)!OpK4mb=h*nVi9d;&d}Zb7d6v0=&M?=*`68KJuV)2 z*XimB4?m1lDz*=D`0#~$Aj}s8fy6`&2M@+F?qL(PZ!SZuQt|C;aY#>GCi1zYh=^>m zvSOLDXc12`GVsieN4KRsci*)26vmRFuNUxyvwr zc8t2{XiQ615MMus)IG)Y^;riQ+`QRLaPU61XPn0^V=q3ZPc!jkHa}=u*s*y5VzJ|? z7ZT#jp+m8RhWb4PNlT0NzHwt0As)TlR;%f(yn;3+oq1dJT)o<0*T`bAvVZ?i%$>WJ zD)URsEHB4pra!9;Cn^6Z3=a?Gh#)~hQ%O#aBskaykw}CjD%@{U>xX-2)oST{Kb?f! z+tk$j>TpEQs?&m6eSo!VHDqNalM;#_&lkpB%&&z{W8rF3<6vw1^4wGHjg zjz=p%q85Z$XEPjW!UP$>kgEiMAP7W8&P1ujn2-|UHiri#LMdy+}#z(WDOq>6hlxP2!oE(jt(=8 zjjfcF)KOK{NMWJ=g+LM$HJmz?fXUQDS=pW8LT=h!HIX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0f5Pauh4_HYXr zp_B=>q>=(YWJ8SE5MwsPn6fn7+|lN7m~PZ{kbcOvI+I9g9ZGMDt7gDg@#UsWR%hq< ziTJ(7bYCqVr)&xF@bb#a{w;wzmEm9|YT4JK$a%U(F}tB!Cb1Y!a+l6BKiFUi0Z>^k zv%Ggrty^KVr_*%5DFk45$_E1EA`f+xd;y@l$yu;2OK>pb2Vvy|i;z}t@ptGk^Gay# z96c{Moexm0%9iGS4Y^2Z#I7<71*!_xt5uoxvDWu%W8sr0f{m&rkSXL@)9GJ5BbCW< zw$MeryKp4ruPQoslg=@|k-+Ozh|T$NIlljVOd&3Z#O6dh`8=Nx-&OBc*qQVp1f~c8 zu@t$Aws{=gmQVPD5-BaJ%xz!Bfs#TH#Q)7N-i8>nA;xTou{S#*UqC#v^XUKp002ov JPDHLkV1m_`)cpVe literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json new file mode 100644 index 00000000..6070b5fc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "hr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/hr.imageset/hr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ad56e1049c6dca3c2cddf85a2f571f07f3bd371f GIT binary patch literal 760 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0oCP(B6)8bahlJ;dsv$VoovK)f|Y%u7uX(YfiIi;>$jm;8G;LD18VR4Vj^ z!@2wpU%uyie&>SUYzb?iZD(0ATf#By5bS;-!NbP@SS&8bQ(O+f>d&#QKqoUfke$o( ztBsWOchNkUKxyR#UYs)0GguN(iAT z3c>JRrVZJ&pE*Tw$j$YJOYHHuqY~jaTh^5E=GWfi`b{-jYB z$`Jqx3Lqr~91d_gp|%zx5om3NU=Zr+AR|MXR$fSDC74W5Rt7yi;Pr}eqY)}9psNdp zhyQ^PrxRvpAvYJ&(x9^wbULW20#ya8RX9{sB*(ku9O>>BeWOv+^!jbck(?Z{`iTkf z`M_ckZ>ZG@p^%7WWl7V@J7Tkm+H4l9_j)zW=M(MnauMt3kauKcWciEVzm^`Y@HC$e zlidz^dB1W*QG^o)1K902mUMXE%|va++}x^PQPmc!qG%UoTzpnK&*{b*ag>clu{F!f zFgi+m<4dmeACjR1u*N1Po~>3Cq~7m03(3s)e5T-={0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0clA@K~zYI?bSO-!%!4};lE8R5)}nes4r+s!KH)6E-Hv3xHt$RicSs= z9o^jAbaNJ02T>$ywS z-$MsRmVn>65PL4fo(r*8HxN~3XnSJ_tx=^SD!jhyRID;xodFb&f?2d!UQIgQ zDRm-qQvnvIgM=a<+$#H|8xILbK3SX&GB*{FSt)lS0LDv}mgjHQ#^>=W8b>ZPQEVD9jhp774x(+ei{lLu9Eb+pHBSfnxz>MJsw@^YIajQoSGN-RYB(QgsLTY>kp$B z&*)3HBlAk6AgQYq(clQCX;SJKMNzzHr2^3=jibal@&AG>Z)Sju%;=xh%?Hhe*mEKF eT!_88f&2g_)OGWM((|JL0000|gW!U_%O?XxT0C7G zLp(Z@_e_`j@#FT+#YQ~L96Nf}${X`8VV-bsh4Td%W_-Nd+4}px|6dPhI>a74wr_gt z^=oh6Hdrw+-Q%0JLb8;@N&cDFA^YFqhVsBAVcjGY3|-TlXQXZVeoYIb6Mw<&;$VQD^hR( literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json new file mode 100644 index 00000000..02d9131b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "id@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png b/Passepartout/Mac/Flags.xcassets/flags/id.imageset/id@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9a25f4e978b4482dc291f2f22bf8c30225601264 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxB0XIk zLp(a)UR@~IU?9SB@wcQ%7vtnZ8cgnqnmq1W33gmZOa(TtZz`3ZK27cDx{XniG9Q$W z2tMK{Y_V{|gW!U_%O?Xx5mdKI;Vst09ZjZa{vGU literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json new file mode 100644 index 00000000..ec303b15 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "il@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png b/Passepartout/Mac/Flags.xcassets/flags/il.imageset/il@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebeaf6b040ed9b8b48e35a08547be5e0cb526c5 GIT binary patch literal 618 zcmV-w0+s!VP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0v}04K~zYI?U%7jTTv9ozZ>$BkmS))w2zozw9*7RbO{C*^F&2l`xl6t zf}7&vC=P<74iB;hbx zISCO8DNPX35lQIeCj$Tguh)g0od`T0_Rroz6`7t^(Q0uV9=-!( zK(Y7%h7m+1Mx*<`Hbg{O zDUf=-OOeP0rPDuTAc#a;^HhU_ZWu-s^YgD{Yybdm!)OdOn>{I$%gYC;d{uR6ES36l zT`061Jp+(cJ??k_T1C^DLg+?_45&!@I07*qoM6N<$ Eg4tUSF#rGn literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json new file mode 100644 index 00000000..6e081ded --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "im@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png b/Passepartout/Mac/Flags.xcassets/flags/im.imageset/im@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..58773b5b0bd45275aed4a381db58ae44802bf950 GIT binary patch literal 853 zcmV-b1FHOqP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0}4q*K~zYI?bcsNQ&Aki@$cQ1UbpF-eeeaVP%mP5@O}ByjVn2r;HMtbGuG=w;lpBDczhFLBGfI zyXW`&aL+yW9HA8&1+efJLx88MzX_Nf{~>c@UdV*e_{(v>ATV84#^j|#Oqxu;d`3}+ z2hsd45d@~KR@@KjiG9-d9hRMqv805Rg@wp!2O8A`!$XNsQ}ff@ud6|SG706=0o;Q& zh)Y4VI}u;J2p=KOgq~2baM9YCC*^L;c(z{G!dV5ge|AG@$&XA@8UEYt!BVb^H825~hGpv)QfeI8-L?EpZIdxd?&s+pWn zRK%LxTzn2kNQjUi8bIF#(ejTmzaS7_Ue3qfI$CaRV&H=lOWPY_s;cm&rm`Y87oX3^ z7n^PAAaf%KXilG|=wdaSw^rftCbRF@6?}?9dTA+ZTUrRDG~)Go@ppDEA7paZF1A-! zW4GHe7z{*tGkJESmROw*v)N2uem>@PR;FC{QK>>Nzu?FE6Cy87IdP>%8CjCSsKQ7gChK42tagmGkrUEl8})B)*6Co@kHPVZ)xU+c6gZg z-QCDTLm01)qY5s*Rzw#gcXTw<@ixS3S5b#}rYs9&Ix`dXBOiK~Cn5wyxHJip1dz|BoX~GNt^!f|&00000NkvXXu0mjfu&Rdf literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json new file mode 100644 index 00000000..cfa28fea --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "in@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png b/Passepartout/Mac/Flags.xcassets/flags/in.imageset/in@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d692284164d1dfa71d466ad9ee98ff77494b1525 GIT binary patch literal 411 zcmV;M0c8G(P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Z>UqK~zYI?UX%BLSYz&uh$MID-H^wWwvy{sZ>-N+RqPYsKr0fAhx;q zFT}0Mp-F#0V>AVUpR1rqA(m*FMt)GIA!s<8FQN_S+V7i-2ku9hSFr*nXRMZjW5oi0 z*dkVJ5i7Qc6@}AWn|1g7N-ZXDZ3WMf4>*}SJNY7;Ez<9Q0)p*rC&^?CRb7)X*?&|d zQUIjWcf{j|D2hN)9L#3lq*AwJGKN&2lt`uWLL}m4G@4KzznsN2XG4zTvQ! za`_oeQ!$JK3`0lLREot8!QlMY01&2W=7IBhgVX8nYI?mf03OcX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x3CT%BK~zYIZI*ddm311&KkwyoSG;VYtb%}oicWx%fGD`(ilyMmr6Q5i zz|+h)mZ`_l7>{Od(`ZAP=2lviCW;DfETWQPrXZVu2(rm?+3)3Y?>m1m-4UJV@9%lu zXZgI}-y_^uo22)d_^RyiBN>}Fr_#}(WAWl3KF(NAPvQoGw-f>pJ zXhj2yF2B!){kQ4sGxn^i*|gyt2M**QiXs4m1}S*=-B9A=C*kMk0>E#-Jt02+2>JO{0ECD8_z2O_U+V1a z)N*$xD_*A*@8wHql4^K1)*IWcJCIv|%x?@CRgjrkg2`l}va*T1yh_^JdjN2D(-8Dw zGtCcFFL1q7+0FAdpUjbAtqCQQ5uaBwOU49T^j&_f$q4u*`ZX*N`>6%^Np%I z*^(DWXVhwus8k3t*-K+}%Dsc!WeCTP1TU&qOLxyPBzkewU7Y6>3GDWz#=F?uMjvC7sKh|>eDC*Eq=nc(sh_ZE+&>9)3&3xT3zkwTdVL>-g-_}3 z?jvn-Mdv(SGO`^#E>*0GIDogMMaatTWKMTjz3$gel2}Ag7 z-0oebyrh=D-&0an-b__hGvmS?aG6)bJ?(Y2MQx+Fp@`y!60*v&nV?%nXPW_?V+F(X zA&eUu$lGrRqtPelYb{gnR)BQ?Ujd0*(Zub(Ej%}C*XRVVLdm{ZRj-QW0svskykUe`Yk&#hohE}1lWb@`I)~ty{DwXszB8uXVKuld-8(M8Q-rj?; zw6s7JMe_10DJrVN#zx7E8KY6F}!^LU6Dra=9g$nI$}a+=L(q$mLQdOz^A`rcK*b6%;gV z=(=^YP^;w>71fcPoXL?RH|XflnI~dnqhjaI7?v#y#%MH=lUu@x)7hLjbe~?mkuh$) zOo|fF4znR~QUVjkkD$8l8D~!yuxHOD9zAL_=Mn^g<;y3sb?X~AI1J+HQ*EkXF!ZHJ zr54d9lSprG9|}dkrL?#Aked2C4KE zo{Gmrt>1=1E~BTX7p1b_3{57HYuAdoaibi)-aureA7Np`5k(Qbz7K`MG6kK^@YD9~ z=S7VsQM9m#7ybM;iTn0l6+1d~;`5=^c8e=k92OOdm7+?uN{o!$EvBazh(@DPG#ZU! zbNMx~^2%!Q-n}Yu>eL;gAgmCF4Ec+gnE0JoR@NZC7zYpLh>nhb6)h~{#W&vA_ehvJ zb?1{SSBl(TbWe>&$^7}RGIFF7?d?4rKYojvn%0+GcI8rA0<2BA4$|ZDYCZ=(v!hdH zLDsVoR90%uyhTL#5*q4_LSf0piv?t7mzr~!VRdjA?&v32W9w5*IfSoz6g3Rw;Y;USiRRA{JgagG2+iO9s>OZ6m@|f9$@@pr%GkO3ED$ z9?YS$Q$L`A@NgfJl3r)%PtOc0E$7x!AsW)~su9@8QIWU&+mVgidE*)~qqa#)cpW z!XJ`;LpycqZp_xLX*4%?5)k0d%9WFuK7G{lLX1WeyLM%8@L&#dxh3J@K79D$G~67z zC@Q>$$wEy>TPG@w0=!GF ziW&##G#VvKmb^wth!-lAjPvIoaQJYp+49Ydbav`pKl*5;^D(OtgV$KCQczHX54^eT5UH+kKQCL z?LPLs#rQim5VbiOAD@A@Y;kct-+YtJ&70+PcIufkXDk~x&PAm%A6@;7+`U^Bvt!3a znwz@_40IC*o( zvTxs2e)!?`fMhl{D&Bb~gt>FaV$)r~lUwO*{Kc7~qPhXPkt3a0u_BC+5O1ukcrKnzZX3{*NJlZ`(i-Ar{d+y4+m(BMw58%-0$N2`Tr6J q5B{^LQmqmfElL(^YFeI`{rDe-g{WldeH~f=0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0c}Y{K~zYI?UX%B!(b4ApV(U47^_&t`hj3ka1nG6M{#s>(9J*K4{-1Y z=;G?)Qq)DTLPx=+S_e_IRj8E;ert*#MYJ((V^X(*5h0X99P+>|?;ZC(aNG%rmVpR@ zFpa%L>TDLM;E0%UM9erMX576iOR}M;hjvQTiC$SKm&;qgjGZFDR@I|9e!4_{e+6JW zwO4u1msAcPF1UJqB$|#}?pKw_{_Pn@k7>I6Z2+9gnMzLb_{gd6L{c$Mo-=>7_=VeQ zp{9Rvos;?03alk|m>Zj7VRw}#k65YE4THtK4HT_Fb3>zL3Ckj?R%CL09^Ejgce%KK zdm(;zj)1^WFhoh$h}|UlD1Nehut~SSozb2_-U@kQH%TT!BefC9msH04h8gMXM`{p% z>5k)Zz5CO_INA-84 i);J<&91$~)h?#Fx&74&9zwTlH0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0{TfrK~zYI?Uv7P6Gs$)znL9-*T%6oGI2I>kRn+@tt?SOs;Wvambh`R zg8B!b9Q%L3ojWH~nIkGkE+7Sv0*4||P>Pc#HA)=+T4#TFccusTP$egPARO{tp5`#~ zKE3xedg7Pgf8E_`zrMmb@`HDMU!JGH|G5x3&4tKmz8Vqrqqmy-X>pBC&}A6=RPvWm zQUS2jZ?RbL$f+!j%CU9unq{}jf-}c3IpITpmpNyan!8ME_&3Kv7dvCKdb!S@$A1y) zh*&3FpZ}IW4&P%*i(nk`UF93zcHUzNg%O4ocR4TKc0N4bAGL3J`8nDrhn$X;T$!Vw zi|Z8e;}M1ICH#1VqihnLAQOX;0wV-UTBJrJgdj>HiuMfsXn<=M8N@y_*#e!gdnU)y zCGUwa#{35S{JEvny&fit7(94@v~3C-8wkfimP*rf=8>A_*0|NeZ#KzZy^2r@JsuOj zctQN`9Wxsns4JiUQBO6jy}NhGRI8}PMNkT1Sy-Njs#fXVyEn~~(}|ezm~=3}7=us> zqy%HozKR>Q8>@taNfPsDFF$=2&+YPG3Erkat`<|g6R7P{9X-rk;6K`G2= zMCs0*FDD|4Me;XqB4=kg+}y+%L*@Q`>>D>Gt(pQ6Zf`$M_xEpEo=4hlb0$_Qq(?_c z*TwigqENv2J~$30Nf1I{k_0SkB9W#bB_<4!#Ui@jN4oAL7K`Xk=WLFpr6+3e@Zt9Y z81L+WWuaUb@_BTxM|ymWnx98F4n}K|j~^#z&qMF+VS)f0hwRD<(VI62+XiFEuC5Y3 ze~wiyllFQzYik70o{{l9l5Q9K+BKq=FR>ODFma5tzP>IFZr?tLU%gr|X^I{UkgkgW z$Ye;`ZLD$`Ap~TzB&`;f=OL9sYfbv;6IQv5bR5z!M0dN$QVDBj1|0|gW!U_%O^81FnV~p zIEHw1CZ}wev9YW1VZ8=37^t9!G!pIa}r-Fm$hB_*4(m1h&jwK z@UTc$Lty)YW*BySEFflG%UNe;mUf71rr}*3-BV{DBxyNsRIdB`@AUagGqP4aP0(?j z(x#tL>mDnXbe;e6UEDK8x5M}O3-$U|Aueu zKY#gHuXOPAw{QQio0|NKzkcDz|F?fCleP-7{623}dnCyI_ZQP`t!G#!|7-K(=h^u7 zxV+&P-Tf|w9e;lP{VsKSVYj}Wk-;DJ6+h13ua`*jkFQU?QT&VZC|_bi!VilKt}QU1 dgJ_`d8J_cAaZ?Zv*#Qh?22WQ%mvv4FO#m9cy3zmu literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json new file mode 100644 index 00000000..76dd7de5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "it@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png b/Passepartout/Mac/Flags.xcassets/flags/it.imageset/it@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4b09031406a2be5f61c7171fb5e055120b46f196 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5=P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1fEGmK~zYIy_aijlVudgfA8C_-Ae7+j&a#QNW{pZxPT5Ld?2EcL@tU( zV2LIuiV%WAfUz+Zgt4&=3>OC>T+|@p@E0oeL#Q(?hJm);W=Q(}PIhEA5c14$&k-`9_Dy<+w=#7sKGz6N*i|m;EdWvV) z0fZV(+EEA%rMr%B$c^HzCg?hb8tO*z{euw6$3Y0ZhpTCsI18z9*fT-|6;j5G#$H}X z+6$ACis5stK*%;Ur5RbLN77}XsV$gCR3+uF{B;#)K`DWA7XhLmy)sRkf_-x_`s`r| z1Nm?Kitnc_a85xn`;o_5uufl$arDfDeww=r*QT9#_8x+;7O~5jdn;7^sO;!XPuAdg zem0(}uMr{j{x`blr?dVF(i8RghBeYz|2Il)cLD+p?>FDlk~ag-?t>8s*_KYmmXDE5 z)2C|Le;miQb{X;@Q;(0g8|Noma7>zw|F_@c#?`xg=&sB7j-?U&GnLdc7Bp9TeCW$p zXnkcq?H{fq+}_z^lqAe^XOeyXdmedb4l;n0Y9#%mcgZ^c9p<^wrwujy%dIyS(U!jy zwYfDGWato-ks8L=0+=Q!NaMOO4tYHG5nLXeMddhNoJX+sQp9e^&0+Y-0}S4^5#3;0 z50?-k2pIYX2%N5^V|5v!s|^vGWJ)7_>3q_cEkH6F&~Dx4#_XvWbYX6r6fAA2j68l4 z-KgxIG#ver&QCW-U*Jv}tg9Abc|RX?atw4_5C9QU>DqS$S6LNWmp5Whd2AH+@*>iv zPNHS)62e_S;|XbGroY6{lD#OG>gXsaC3xX-G?*-7esemul2zz3tZ|Z;0Hjypo44uw zY%AWQKY$PsyJ^}KY$Yq{E-FWaLRhLwaPRmE&z?h|MZX5)_$RSf7Gs?7)cuY~4y0Fs zvlno#E<>ri7QN^o6X`1#A{mXi%6FoQ zsNv?T3+{n{o*#JI+skp4??Nb{e#K4tMM4ctIEyynKXs;$w}d%=7W$D{xVP;`1cH$z zL(UlN6>CVH{OrR45&i(~?O)>Fx*rkjbI`c4WKj~>!n441!$WQafd#03d8G~p~P!~e_K zK077Mb7o*$zXDyRJ>l&l#c<;ev~FL-o@msF0g0wzAALsyLv9Wk6>Bi&24_KOOmj=r8~UTb=~_ApN)x6_QtGcO&cgDPn0B8;Z|JY? zo31;(OKQx@6T%;eEEw~0$*3&G@buV+0&us~=2o1=mH4Vp#n>aGqHMQfUHJi)h4~;4 zJPpa}o>8MQd!pzl+$6#-kNCf(1%kr$`5w`jJyA$X-8Cg8XUu^A*E|fV&8_?gLFlY8 TP|eH(00000NkvXXu0mjfe~e&V literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json new file mode 100644 index 00000000..26912164 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jm.imageset/jm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..276ecc6b87384def19d2328d2c768358ec2b97af GIT binary patch literal 835 zcmV-J1HAl+P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0{BTpK~zYIwbox~m317)@z?X5vrWe8kU`pD7i*NZE@F&>q!z=x5EAS{ zgB9Hr47?CUDWV`}yBUF?UB$4Q28joQB(KCk%wgii@M2b`?c%`HK=&t^?d<&N;<%kZ zo$Z{ntHm>Pw%IU+>i+2`c1mt{Kku57IR6#36 zRS$}CEutyEQ7@`GQIu;eK;ns+B^B>vxv5HJt4>8VB`TsR*K(*XZ{q3-P?W1CBQX7l zcRu0JaZ>Z885%dDSBWu!qGm?9p~9t%|>eL zk$5Mg-?8`2(s(k(8^80~Z;Yo(@9lm)zh>L3YhYvn#g%XVJG$qm>H0PQLA*Xo*GiBvtfw8=~yoVq@48v-p>=S`^i^6sm@p)W7Y$N|DcIqZj}H N002ovPDHLkV1k)2rDgyC literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json new file mode 100644 index 00000000..dd61a74c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jo.imageset/jo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5b01d9b56d435a7d3d410aa55441707e8ea51259 GIT binary patch literal 452 zcmV;#0XzPQP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0eMM8K~zYI#nZn_0%07-@weg+JSi9HTpAo|@(++`kO&%G8fhg+aEh+80Ch|{305T`(fA$Eg2qeP;;(`+7CE$|tM z%to1v_Lj?Ob48h3sWBJ~9*|V3DO#4uR zbDnFaYbbt2^V}cOO|{uKyScv$*QaoE0uzHTTsOk)=F!*<_!Ywty8wnEb_2FToC4@V uoCd5x+yZ<*v- literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json new file mode 100644 index 00000000..ebf9cd1f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "jp@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png b/Passepartout/Mac/Flags.xcassets/flags/jp.imageset/jp@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a5c917345228f1cc48881ac1a1a5ebd0c0674580 GIT binary patch literal 478 zcmV<40U`d0P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0h38YK~zYI?be}B0$~`(@h|5M(7;gV=3QY|BnW}Rs1!QG=twjS{wD@! zV52z_ve5|y8UYG~ON??9CX9lx<1jd!;wJCGJ2CL9@B2LOC%o^T*RxzM%fJo$OhTl`t-zGr}J&iABk|5&vTl~;ZfbS_PBX9 zwq?;zrvn}3 z&rFlS{k>es%rqI7O2SQ789zTWGfjDr$;%5kj%x^x!=zG?2bs27?h&inc3U1~F&b?R zSqz8rAV=rtTSL@~3we;^SZr&EU$9mP63Apg*X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0#HdrK~zYI?Uv6=6k!<0KQoL2Yf3UBVU~IbOQ%>0wjbcZ&4XwE044G0 zWxa@}5OE>srhkEp;!O~*b=lLVZ5sxpIbB z6cIT&5CG5f7#|-8pdN@h4l&1}zO+6uF+o0`S1k*wr^d1@aa~tz+m>mNOe7+iNJOSV znwy)&bzQM6OZn7jv$L~_TrPJ@1^(dRfR=O`XL*@RGc$+?&&S5t7#QG9clU42(T}oi zJ7Ek3gP#h%uVfSvR%0;$^gy7T?_67BaCB68P%(_W@nUk)c^8i>`L=-1z*WHC+bicc zvRPjD_tU9{K~qo9Wkb;ez+)g^0?DthSL7Q&83dpz5SL;{0K815oZl&dRHLduK2Yok zK+E7D03TB+-UDB13DN}AmEzrng^GM*EkW8i>_~lA7f|d-8#R74*EyV#hG4K5EG}~6 zI3O3MrZx+{e@?}8O@!6qVaR5wv#fI7X>H}^+*~#H$c8arc-ENP&nfx#clSBl7vjpo z3ST`BN*}mPUx@h2hXh&!M^vbkeadbymYyt~k8i16Xd`DvxF1+yx&zv`w*h$60e1r{ z481zdd}>~)Uif0TO?gH_T8PBk1ZZ&YHncx|02E_1NbV&GX(5u5RH~~ClJZj&i~<0j z33s|SE7sGb(S2RHvhx4PcZlQeIX1{i=|9NN`Uc$h`)R_htG56E002ovPDHLkV1fyR BFYEvS literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json new file mode 100644 index 00000000..0fa9fcdd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kg.imageset/kg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..32144c443ebc9d380061cdb175f7184247b0326d GIT binary patch literal 829 zcmV-D1H$}?P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0`f^jK~zYI?Uu`nTtyUzzq)nn-rM)~V=|fasF88NFv$$Y#TZZ!QQYX> zjT>Ew2!gKM2mBAjof2>(fYCbSAG!;=DSYo}QlRzR#+1(HjW})gh8u zh=idDU__rQ_+^ItY;@|bbmO(ZRGf_SmO z3oV16Bg!2~(eW8vh}i!v!ldGV01?nQlM|mTs4wSCzci$~QfK4CDG*R!&Y69EK>zz1 z!n3Hhrn^#iPVelWI;u&Qa_UcIOuaZ__03t5#e!4kwmEffo5pg+>RYq4p3bN*=Y+>A zlGC{}h?672gW8D#bxd>Qg%OwDZZrBbWc~f4%v=nSiJ|jZgY>Fm?VUCYA9TpBDx$fH z;qRdnh?^q_|30YGE>u)^jQTw85@}9=e(C6lE)cEd*X@vALk^O0so@ z-!S+sO|n>!Z~2%5Np@L5DbPbfc}rq)w-I)pn)HgI>PvRNix61ol3og2)4T7H?1rM)@)4dz#)hR&w&{G)p!-#V5Q3@aQ`)cY)Bm={ z@M1uEMUij1uPOIP3*D7E(=QM45=+_fkxk9qdp-Q7;oz5$t&f|SOfdQ@VDCcBIrU^9 zj2m|FW5j4pQ9Dr*FBA;_2#MxP(zSr}nj*Wd#=VibulI>T0Lq@E>Pw0ppMzgRgoNCk+P9)R4bLj&>;X1+2l&XxQ%00000NkvXX Hu0mjfau}NF literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json new file mode 100644 index 00000000..c5156f03 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kh.imageset/kh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5ab5cc81f6d5c22e810a524cedb47be4fccbd9aa GIT binary patch literal 689 zcmV;i0#5yjP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%l1>K~zYI?bf|d6LB2J@%Q!a`h=8vm7+o=g`wCeJ_JD|(G?#_d;k*@ z65^nVE;>6J<$o{?E-pAbJ32X{A(fc`+fYu;|N^t0B{QkcA-0PRS z;Uu~L^(=6k{fxw{YhMAsqzS1_6H*)H`NF$+Zz;2{h_BvITqqg3hNKabcH~Xk=$-Fhl5p|S0#Vr62|E8jv(?Kckk0qTMulv_-(Kc`~FSTLmHMU zW4Cz8KDpwvKs3KGmkMkf_gTN-5JJAr3fr6Z;M!T2MwiOv2^}4ImgChnivBy zB9miy@_7=81dij-(Gy{9`U$B|^8^i(vao3zIs+d**VSJ)#QW+k;kz>&424MB4whx1 zX&TXJ6aZb<$!4=0X%7+ZiJ}MFa6NcgZ+-m`XXqq)I!!j0LzpJ2p5w>z3d_L&2th?R za9Jfvij0*^A_@h9=T5-;kN*x*KGuOWafQ~^GNsl4{^DBoAXh-rLf}*ohE<)}4h2QU zvsy-;xJ)^b!kzryI79%}oLJMFcQD{o819JN+L!VQATUH{sQC%CoL3b3nX~?!Ak|+<)^M(1g^c38~Fb XdB)izy{}BU00000NkvXXu0mjfG>kns literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json new file mode 100644 index 00000000..b24f2b71 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ki@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ki.imageset/ki@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..224aac6fd3eee3a6d3400ec977a24e8271adb166 GIT binary patch literal 1613 zcmV-T2D15yP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1_DV$K~zYI#g|!ZTxS`EpZ_egd1kzfCvnDG#!E6;>a=$3CQZ_sG{r3t z+SHUls#HQ0gb;{au&6hH5J(L|N+N+oRfK@HiAxenL**9dG(&>`@iq~b&eQ&ysQq4{XEz@DLr6-#ZvyKZWe)*r6Ozs zeKdg)(?1;$u~tPbvZ7=wsQD%c>x9nFqUKt#R;6KfD`+|-{Ba`3r|zqV`vNii2{eC# zM3#cS%Ym>7GGER?H3{Mq3Fgkuquq*OOeOCN0$^o3Vv&$^Fc(`fQaZ8e1f)qQU2V?MC#)xLc8}l-B)Vl0uyqcikzi@3W};= zF-cfd34}mOlhB2Mxxj>+et$jQGl(I9o+e{1vLI{{k|d$XV)41E2!sGROGVC*p+LR6 zy!TiNfZ{F2_S{#HJ$Yy!T_^hPpE2U`WkOSt59^L+k&B8jlD(*jdPqfFbF;=+V`C!X zA4sWAr{v!Ln3Cb!Ab-*@84oexKTmk37a=5^tG3`S+=C>k=&2-x7aC9bIaP(X&qcdSDi*h)8pqh=ju0?T7OY+*K zk2!L-mB4J6$4YZKa&R~0-qlN^GvJMDo&4xTBXf~B`zlL0{MBmmU5-UfFsAYA3paSZ zp`F>t0(;9#IP^>fp_n!zT;Du)YC5z~>vr16cRA=Bo5jXH#A_F1wZH{s8er3cFeTi}FyO+y3(IE$rXsLy;u{vteF6^C5p|?Brbg07Agy zzI=|o^d!$$twWV1=Avx%okMR2|9bD=fa)^emp}{9MvjxvizFUz0^N zp1?m9BsbGey3I^9p5Sjc`k4;Ls44SOygGv`-9sbd$EU8fywlQG*)co`fDmwS=Ozw4 zvlXAmMR-BubW0zvp81f$so>(gYpd4r^Dpnh=W$^eaG_&>A0EHL&7r$Ksx0yCryk+! zpDDxZPG@L3M15QT;+_G>l3;In2^;fV9|;Z|uJdHr_kUye7QF6s{@&r|#PwT?$N8Vi zcR4t?a}z#~i{}0@es{T@cp`<%ZY8Pf%tzy7JFL9&>^8ja3{G6{=45j(|6QB&v-#fB zTXET~ocYIX>Y933NF+~+V`p32zqRM#GLy2Ds=l!q{&=;Mj^Qa*Ic7&{U9%orCx%=a*?DAt-P;&Ik@1uEXGg|JVE*$#h~G+s&3~00000 LNkvXXu0mjfpO6<> literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json new file mode 100644 index 00000000..11c0f8fc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "km@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png b/Passepartout/Mac/Flags.xcassets/flags/km.imageset/km@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..74e6ad276da14e8a41578935c8fd4324220038cc GIT binary patch literal 892 zcmV-?1B3jDP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x12IWNK~zYI#g%JlQ)d{*f9H}WJ^uj?Kb*;i^RIEoosm3{5w#8|Y_GC&w6>72Dvsrud=LOt7bthkX7hz&9NpIBfsClZ zYi8RY%cd+HIjk-TL37-OB#0<-D&>yZRJRldkCc4UV$Yfzm>i5=kDMY|OwTSY%6ys6 z7L{T#D4e)|hU;xLwDh}EORIk<+Bt74UoGB&L6j2=GNUOb^LOX0reggurkia1bniC~ zm+YY+Jr@8~Qz>^;u;s$%IC~ls3?b#N}MaAMTXP4 z_yu*n@#kwIih{iHq8)&Lx*h=J^T4baz0G{Ztx!P6(z|yP*0JsA^ z{OmYAE<}ziOxgFHym!Wn9MLDj5LFc9$G?B2KkR2?{##_Hy+A}$=?@Q%Zqi`gpFX}l z)Jfi>q2~gK191&{*nRaNfk=?UC40%Yy~M%dPsz8QEzFtzmOuBP925;76 zO^?y2AWC~7mU=san&?;de}YVP3h^MifZ{5c@)Tk~X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1A0kBK~zYIwbpM;)m0e4@ego^!%!i}Kdj6#TT9VW!JL0FL@CIY8*`cT z$7;4-WNTx?lBuf~Dk*L($^N*eZn|mCt=5(c!8g>4#PEt+Zdh?$bGnq7N=vx(;(7%W zFBgO7<$2C?e&2n6=RD^mto~Z4>5>NxVceh0+mA9S%$wzWS05Q4p2DzU%$n}E#GwR$ zg0bwI%ekXW&F_JL>m6Kfr{iydz)%5XrLcA~8Go^CISq}m=MTD(!~~vyh~2Yj*hkL% z{vlvcjZ7TD`#IbQv9N@ulkwLMijhDfFJ)6Zja}QwUCg=jqi^L?Q&VHsCnX90ZzGSV zM=XSb%zTA2t&#B+D^^HJNzu{KAt50_b#-;0^`%SMw$X`u2DvZ5>PJ|TM#XwQ+e>$M zPd*e1Ie73O$j;8bqkhZ-)NbMFNnH5C!}s)S=8R_l98%9jj^w9%Zigr<5hOt_UVUCOCr%=wexQ(SG5nJ|!s7Hv#3k}2QFo&&Mx*VWajtgO`7*eEF} zNk)2?+AS34(E1KnZl0!*vz?3ENWob4&*R$h$dT+10%~e%G&V-Qwyd~I%Q5C&qB*|@ zA{zbfk*pNf<}l_u%U5!wAzpM2A3kh!CLeF2WC~|r=gJR#&%LXWXk*$to91tsvS45k z+}sNd%x~vp{@o$Ci;-w!a-PEH`0@C_0MgUgw2rbTX)WXGiT-PDGm@Oh8x#3Fk8gG} zV-Y_!2ju1DfsBj{h1L#l72eryVmh9vJ3r#UIxfFP+lPez88`$ay!EPJ?U!Pf z(|zOK0EjfS!0BJ4#e#sgwl*6!Y(T`q_75nXLhH+18^Bc`E8^~~EiEmUEac?(6kZ^> zc<>;I^IX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%}P_K~zYI?bg3b8*v!N@%LR$6E(4^ZPco5(b|?)Y!#`YgHf=Ht0*`r zA~;FWC4!*T!NtXYz+Ys;V*^uvf9@fVW@fn8(~~}r z2ZQX7jiJP1DQICKPi!{yt*yC(6qrmr7#+P*J6>8MF3W^Go^(x+Bpyyrs|Jy-7w&X+ zB1jVc*;#^4Cjild0|34Z4pLZIi6BYTOiXaMs|!)9B^iyX4=E@w2T`QjYDHUH%h%yy z5~rsC#Qgr${MhZ3wzZ`eC@Uit2xJZUXlZXEH5J&jZ_Q`A!sywUs?HeuiKp-VAUasV35Gv901Y7Ll6XBZ*EdQKTqTO zI^mriP!yDS9N*NGDhS9hBLKe1Npy8}7%UbV*VYg;8UPGtGcQ~&F3--`9~t4o>s1Ys zaUW3<2|oAracH#?-r5310U#NPaO!rmYq20NE~fxb~rqj7Z;YCtp1PD==C1SUD}`v@gtuOjD{ku^l9^;YI`sH4Jn&6H&j*sH@}Lv bkn8ygtm@B)tLU&d00000NkvXXu0mjfsdq1F literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json new file mode 100644 index 00000000..3ad10804 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kr.imageset/kr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4f4b1c5d67a7586df71ec2470e49a7da769d857e GIT binary patch literal 1325 zcmV+|1=9M7P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1ma0VK~zYI#g=VMQ&$+r|GjMiMOg>3BEzA>87T`a1q>l(gja`}I51=r zP=dxUGa)n4EG!{}WKq#CSR+|74VjHLp&_A0QPE}}BqKs(>oT{X2D+3$H$t(th0?eG zJ}g#md&|I??4O(u_jx(@cb`j3{0E2^ru>(l< zGD4-Lr3Ao~loZHZ0*ywaR7h_W$jOr@34nqiu&Szx<>lq{cs#ES z;c~gy)YL?+R?F7bRu&f*(`vOY4`MVL34j3D(9po-;EYHaN)n z8#lP{=#gYhdwV+*5)ydl&K;^$Djq+6oW;e()MzxEpP!EgX=`gE0M^#lQV;}ocXu-@ zD~lBs74-Rh;+0;%&R_ELISh!#*n97B=E4Pr{QhukC=}x5%a`eLxo9vLs8A@_+1bg$ z!a|OXjYWgJNZPq`C)?WEq^QYIh?6ZXQ2>$Sw~7h|oX&9C($W$SA3n^SoE)Azca9p3 zhF-5%^l3!LS0~u zEzCo;FpsU*u3^K017W|-W`kO-MqFH6WU5giHKANC7eN4k{o=)CA%6Uz1Os_B@G1UT z=|_KzqWR*tB9Kj+HpR@3d9y~!anBsn_j~$>Fy((1h5&${GYip!Z3sSpzM}b83^L)0 z?K5ktLCB))zrLG?=T_UB1$m<0E@`*FwGp-rTO@q}L4ifc-z(ij61dFue6+^yhz$AF`{Kg%B9Rp`+Czn_jQS!-o%71~M`-0+Y#v zg9i^{U|=9@U!VFmzTB4$fuUvA^-_m21IR8f3O}38W*j+k1ZJ}tCX*>DUUZ>7efkvj z_4QCHl_)4EKu=E(hK7cao0}U>xcyx}x^7QkA#SZCfFkHe(>6JpzWE|-v)k<$8XCfb z2M;hZG6J{Tjnk)3qq4FRGMNl`^$*Qru^>A;8^?|v!_?Fis;jF}R#t|+d-q~yW+pu8 zCr3Yp;X)%0s28xs`xoMaKFC8ssJ#yCOPs^^UssAC91aKS>gte}mxq>?7I-`!?BBm1 zd-m+X*x1<16};N?PMkQwb?esg{{8!$n3&+%vuC+u#|~<>TDskC$u_^7{C+>n%F39V zo6C-l4qm-_l`fZyMMXvI>gp0TJrPJS7-UUN4Kp$_c;(6!3WC7%=g+gDp+Ve*S0SBF zN1aYbxm?aOXU_1{sZ*StosA6ZjcR&}i;E~NErrkLLv3v>rl+UT-QB%{?HOA)Z{Ec4 z@G$!O`;nHGhFiC8L8(-}8e)|Ed7hr0W@ct4`}+D`s|r#YA0OwgUAyRTIHcUs6?q|# j$AiSg#Q#)@Rmk`^?w9i>i|VBP00000NkvXXu0mjfGq-*t literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json new file mode 100644 index 00000000..d5298c56 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kw.imageset/kw@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ce74c634a7322827934d5c27efb275d7750c7f35 GIT binary patch literal 409 zcmV;K0cQS*P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0ZvIoK~zYI?UTVu0#Ot|&zqUX86CBVC@Ce0pf4yY`h)`efb0iq)h?)Q z&keMp5nOIZy;X{P{gIwpjGG9-#SXyiCbsG-#XnQEilmJClCMGDeGv8EZ@8Otnt zDFWDXPt%4F!efUoh9aE|MLPL6BAR2Doqh()TD{slJD30OG8kq>tm#(i>a9NW*IgCC zZe)UeD?!NnDmhK&R$2{l8c(sJN4yqj@vDdeWW(beMW+dizSqeck+d4(B%Wkdw+1TE zQ^d~-Jw^Pk&?O>(?EotL5Si8Vm&52hOCy8(5i)!NpF>uwW^!b$00000NkvXXu0mjf D0|T;R literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json new file mode 100644 index 00000000..2ad7ec67 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ky@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ky.imageset/ky@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fb44b3e37acbd1c32b7ac6966f6c255777d4ceb GIT binary patch literal 1533 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1+qy*K~zYIy_S7YR8<(pfA{Xf!U`_JiVH}95Q;7z24dkCn4hVcX*!is zX&MG)P6eo$WM(#wA6ZT%=1ioPqLo&reOMTXVJ4{%qNxjlAR@cVBD>t(z5QV@I-(V! z&wuBh=Q-y$?|bH*E9`%GrWE(w45cF`o{Wso$j;73mStMCWXX6Q*_MvAtc;eOc_d8U z!nKNt31s6#YSgP*RdbM#g9q3bEZ#;?OXP zGJ{CkvkJe=Ox%{PWMj#xeiC;@So*Ff( zurOp9O8Z7&Eh|HR_AJiEMigFN$i99U4E31J*0#ee78^-Pt2)AwE950juy-xaSKP|w zG@Fqf4ip*6d@79 zkHvvJHTNLR&C-n^Ybtw~0t5SM0Yp(?*syRWPK?I#*$!-{PNAAL7t4VIIE+TRE_fC1 ze&I-!mDH|TL*0Opd|GV9V!8TGY&JVk0Dy~&f|ZN4C@-$V)_8@k>M};&HysZTxAsB4 z`s%n91frsPvT@@KVtT5mcyt=F%AFkFQ7AVaV)EbS^72~J=k6vudj=tCX;@QJnG+n! zTIn9vZz^g#RHJd{k;NXoyyF=Azp2G)gTyEqA5{Z&b&c&-Q&g)}hODd!94^Wvu9)cWV{c{DSyN^5>^R6>WPpHD)$#D!?cyuq2G) z;>AWjKVqUZ!;gs^M1SH4iN>Q0uQ^Uw`2ogTYMAX~ruUdZ?D?hk+G|P$n4Js4lv|eI zKkD@3Rw`AW;2{Y#`O9DsF$+$_W&zy^S57^+j7L|OUK`21`E>dpvN|2ut3|BcW!xR$ zW(VH@8Qmo%&9M@)d}HRefcVaPk=`Ls5p0}6Xz&`kHw>mv{8ltlB>G7o(dZv~XF%3f zsM#~^750x0XPM7PYCqV?vkiSX^Tt%>H$`%WE_ViGST9d56fY!w?JD~437NTNL|=J{ zlocx&srv;tspW=@0%E6v(6=)HluD88lmHa=7R10nhR1|ZAw@A=U&-(FKFk@_pCV%% z$;Y-+7Z5M*(VBV}A1dn+Q?_GCDN zd;G!4cyMv|CFSzRgoa-IE$y_{cIah;8|xADpUcHBY5G>Ke5}LojcHUx~>RV8^cW7!398*>jbh4bUoC jmMJK#qM)$qU-|z6v$iW0B;zww00000NkvXXu0mjf4s_>u literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json new file mode 100644 index 00000000..8f7a14d2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "kz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/kz.imageset/kz@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bdeef0633c49f290780f97cce0e11ad2f69e15f7 GIT binary patch literal 1384 zcmV-u1(*7XP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1szF5K~zYI#g=bqRb?Etu$dJz-^QA96_kRps;8J0y@Nf06BYSmh0Q?sSX^lsX0&b2!?@8)*zJzEoTz81Feu>#hSO)0R3pwJ}@SjT9VTSJxBLOGe zGQ!gT-$IPY2T%<8oMevoGd()*e*rP)h$Mw4X*@E2Gr$6nBT0Nx{}{v{eTchSq9o|h zB~vaglsE<3{gUd{TrtJ7Iw*X==S!iAWz& zx{1<7zH}0ykCet}3hvx{145%1i?ZosUtQ)tnWnI`R118LK0qLSc8dk1OF)nxpg(<#$fIdDM7Y zCJkQgZ{~Ud74ek)e>I7%gSm2=RsI$V=*Vge%K$?ZkRd`+iwMY>6a>IZh<*xb(^cpE3(YQ!1ld6pAtqh) zGmD%oE#4zTu^c8W101yL2rwlY_m z=+^Rc9eEtc5cz!X?&Az|#sx=7aEbRRGbPSJcQb`1&J5bvnc2(__8u(ZbKZ8hoVSB* zlt?p4oy{37q0;PTV`vjK-WE>il~kHK9Nw5Y{NYQAkPI=KgM=8Old;_}S9<8y3OrJz zG)6=4Ff07GsWNZT$z^O$zX_uB>ntLYWTDxG)i9p~&vB)BmwY+J>zU730*#+{A6!ui2QLNJ`8_Y6{e13T*WNYLaSRf#&po$!b*QD zCxb;C3f58Wy+M<^n?r6L$8{ys7o$_5SnxVDDv*-Nb5tGu>KFpO(<>mgDeP z=DkOe48O=bnKy|_H}{4%kSD*>U>~8`-b#kZI0yh4Jt|h3-5hh(%rlL&xa+c;Q7-pB zVy3jxY;Pl>W#ma0OU(x?FkjPXALOW8J+kMPoBgNoBtv8H5T|ru*36OM9scM9Lz>S5 z^Cc&B@q~UwXtuWj;E`sA9OEKsBJOJ0Z|`JCV&v0Fg{cD(zO@g~t>q{(F~o@c(FrQd z7eq`i)7`H$+K0|tXbDqfS~#l(TQ>Y0YNiGPkRd`y z2eE(oJ|@#)dp!Wh^=b~-^@JJj%1MeD)am1T#d$#lM?Xch*tHZ%%an^pmC_g~rhY8U qrjdV*A|gW!U_%O^81FqV3{ zIEHw1Cflel*fpzhqG3y7!ojR%jAaZmJytBTAiUwq$LyE)QXfhNxNH3Xx#;w#rq;Q? zt+e$|&bqtCRPxf{T*;EFOC%+LK<{3~A%o%`&?Bw{^q?1!`S-SYl_~D|fdCK3qeNWBj znHgKp$JZ~J>&!QI=h+WGU-LJ;va9=duHeTR*;|%RPH&&jqkDO~aL9FwQtiXr<@aYi z7hq#!YkOC@TT)H`W`FR$`iF6CoZa6hX6Z1WWW5D+o8+gcaKoG%)e{wM&rEZScW!G0 zf`^BCkMmrfE}vvk@yqOFUjhhxnfQHw;q+GbxjJ`4m`>I2yOWUltKzK@v-0Bxs}`V^ hPYW{HU?IxDaAjZo!}?m8FTf~a@O1TaS?83{1OUL}!pZ;u literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json new file mode 100644 index 00000000..e5b0aafc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lb.imageset/lb@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..22413f2d2cb8f88f435fa1984b4e5a7a28bea185 GIT binary patch literal 703 zcmV;w0zmzVP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0(414K~zYI?Up}CTTvWF&+}PAF;|0H>l%;ZHfQ%E3ijKSc|74U9%p}6QqQQB79rsQl9jUFR} zaEKf;y*@4U{d%GA*Nb8Iu-N~#pDQZ&=eu#V!Qh8M;@5F5Q&01)U^Q-f0vB(1h15bblng=8qC8=3Ad|gadf0SshTW6^7hHxPQ2*&{r_)pG7C@@I3R-WNgX? z^(Sv75eST7Fg(;ckyMk?t8e3Fk80cF&6Q0FfVtg;;$%80ef;@Z|HAtGxU#4sm6b*` l>LLGC%t&4&GkKBB{05zQ^OI}|&13)o002ovPDHLkV1j$HNofE8 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json new file mode 100644 index 00000000..0fe73c16 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lc.imageset/lc@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c164b27014ba3bc64955e794322cbc2ff3a05e92 GIT binary patch literal 659 zcmV;E0&M+>P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0!T?jK~zYI&DY;cQ(+ju@$Wg?oNl#WXGJtfD+6T|m`qpgSCsw*Qs89} z6x|gBUDj2<7$k#jY;KDnCQFlsR7enLK|~}KhzzFIMZ&tU3w2YRU1;mVV#lp{d@i5& zdC&R04-dTO2p2!DrGOrkjg+V`pcGX@Z1rH!>;Q<*3NDMn5UmKEX7E@+6cmJXnBo1~ zF>=`{jv5q%cq9mgLWIL%e3C+tMjhxEe=syOL_8j+QMJHctpX6Q1hH6*d_K?o{5%86 zBUe(;*ua7 z4sXf_gF(F3ZGs%qL*36g(&;n+P5VLG=t44?#ITs-K*Kgbyb?qr5mr`KXwbsoeR%4J zIt>&G1rmt_o(j6MC5TQ1ZH6NK{rw06#Baj!7I3$L|Jr&@C=|kBEYhH=A;f8c(dQ$~ z&dze<0-W#uvv%biTrHp}bLmpIKegt#|`wEG0yy1aS4?>d}ztPicv3R}5;WJ8YV zp_uzdcJc)Sw?XxnofKlARa3`j0H&DS;e&b-*pxv4Eu{bN(8oa z|Hy*q)o@I|Oy|Bn?1#(Ow;qI3wg9c#1q|x{2svqinekq_I`Z8)Gc(?cOJ-Nf zLIj|zZkQI+plrnNuv?#TR{dDkM^o9xHEVOI=k782RaeT1qKF{K8!wyY0rq+?pO!SnY!F04cY(z002ovPDHLkV1knKF24W( literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json new file mode 100644 index 00000000..89d2181c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "li@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png b/Passepartout/Mac/Flags.xcassets/flags/li.imageset/li@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c595cc33f02d19619567b4ec9a77ce0b7e93bf5d GIT binary patch literal 425 zcmV;a0apHrP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0bWT&K~zYI?bOXm0#O)%;rEQrIHpskkOU?DQIw0QZ3_w7x+v-nx{RQk zXx$CClGZKS76fH2`V+D!5K$-dZ=7-3#-Pwb8yE8~zs-3#-{A<7#~ENBHxnWwxeEBz zpCBu-Jd&{7g~(Ee_2~i=YHO$vf3Kn9>u|7f&ty=iSPL^Qci5VHBoWnVcEeYBfSYEmNuoIlD~`9}-Xm72V+Dvx$u$GVa4L{k(p( z(ZUu!+Z-sOFC-D~GBX7cO(VS>mc z@B{lbGC!;TsCxCLVO+S0sG+?3_v%lx2$6CV0u)DPH6Fy72XW>>oOuvu9>m!XRX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0}@F@K~zYI-Iq;h6lWO6fA7rfW_R|hCdS>EXgX^Wwc?7caee^`M}FAmq@KXbWu+3$3+YMS{fHpOmP{cj)+d<=iy$k8wbjhSSm zlcnO5+h~%{I~d#RXaH07HqPJgYFc<$E3sR=0Fnwos#S%Z`xm+JZ5|<&mO=8{%Iy2R z%EY}C2C%x53?H6-km2(821?Rx83JIgq;c`PK2%Qy2qN--<(A`-AOM__-t^phY+tk9 z9}rvmG(LJ9I_FDCIa{HuS5`~8Wwn$eFREkTG)AAtNc;)rLK~kRnkN?bnO=aA3BleC zf&s&$Ru^2q)CIF?63WW=j|@`mvnZEUibb1)pOu-bfbGDCJ@ELs%0JVRpMS}rC0xkQ zVCSglWeF@u=8aX zxQ2uP#}lz&E3%SNnRGFHVo)sX>9$0D5$bF9)7BE$oe%%{^$TVrDWvqqno{+P@eH nL@GY_htuQ>L1e|d@?Y~WcS#F-IluAK00000NkvXXu0mjfc$ApZ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json new file mode 100644 index 00000000..1bf50039 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lr.imageset/lr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..75f6ad4c82cf19ec2da9dcc55cacd1b5ca3de0c8 GIT binary patch literal 616 zcmV-u0+;=XP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0v$<2K~zYI&DKpw+h7<6@P9t6jV4{%L`KW7L)>H*p&;Fa!FUG+z3e#X zK@f!DMG*Xe9fg4)j@<>1ieCd69(M53jUAjIPG$$2u(hUk&N);2kyNpEw?d$UI^L50 zZ|{@$ee*j!4+%raOD!7xb_-Qx{62%o)@(IfuN8@qBuo9){|sNL*xBhtI&C7AN?YoO zo;KXs*r1MJ9gZ&*A%lYtaeA7^)YMx`J?{|V3Wupf0GyQ}gxp0-iv$4Z?|%TpxWNAY zF#tf*bZl;ZhbR9VN7K{P6`U;l%8=dNBqk@HV0id3Se5|*EG<35+}sCDOuPmFsM()5 zd|s1g^_L;KZeV0&866!r(c2pU0IaR;U}$K*eBivH2~FMI)FF=6)|{nB6r~xV&~1#3 zt)j890i&Z~xLi(TG6euYLTSgnH?OEe0DQJUyxtoK246tabO6BO;ud^98JWycEnaSk z1+ur7vOJ8(|5(=T$1!~Jc&HmO z)2#fjnHhgEo3&NJNs^!0QB|XOaw6CYQB|{U#`iBImZ!fD1osvI0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0cc4?K~zYI?UgZW!e9`F-!s~FDN+Ru#gIh=w~Tg*gM)N!Ed=~k{TY=O zw_p~L4nh`#Qxxi=1eYRGlp5MzrfYfX1B6UcC zza%125|JoJBa*(k)))0FRXo1TUjPV1B$miuoX)|_9TwvIK3kT>?RJ|dlZiBjnfW0t zE(3t$IA}JTP!t7@S4`&&&S1OT7m2LM1hk#Bc?e^9?Pw4?d-5|Jp0 dNR*=y`33?m#7;pk6Vm_y002ovPDHLkV1fpYzoh^G literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json new file mode 100644 index 00000000..063614b5 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lt.imageset/lt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33af49e2076871ad58df15492395ab33d6372bb6 GIT binary patch literal 223 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxrg*wI zhIn))-`OAXZ{yq(;*xEQEbaF`*d$7Muq!kNwl9ET=4scWCz)5h`y+j!=*e^YW70a+ zai8lF5`NfEc$binkWyivu_*0|;)?_jzF^UE^vPd+#%=rmvt1F~KSPowGU(@$7CM9-cM-|NUoSxcgG6^Xp<)7NGkWJYD@< J);T3K0RZ4yUU2{b literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json new file mode 100644 index 00000000..9eee7733 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lu.imageset/lu@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0175718a24838317925a1f1918dbb0e0c54f3745 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxW_!9g zhIn))*Q`$5IjeD^VoPGe!K`JBWehSsRxGkGyrE#)vlWKk-aIRm|Jl{9J9cQ*V$CB- zX%-9ke%8L4b74W}tb>myTtBqvKHDw9{1%t}#&@5HJ(S95zw<=!sfG$79c%9$3|LB1O3(P0*B_<^7FwIz$c17_;0u(baOmmmdw2oPR Q80bs}Pgg&ebxsLQ08WWtegFUf literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json new file mode 100644 index 00000000..cca347b6 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "lv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/lv.imageset/lv@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4c14f4ed411c2338e9045748ea1466c7e69f5e GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxqCH(4 zLp(Z@??}x0_2cKs%|<-T94fj!^9^{HFi$wR!ubL+W_bP0l+XkKtBpGk literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json new file mode 100644 index 00000000..dc2da8bd --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ly@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ly.imageset/ly@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..738e8ad3140ca8ec4c3d84b79069a6d63dfe61cf GIT binary patch literal 399 zcmV;A0dW3_P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0YpheK~zYI?UX%B!%!54-!K_C6$z|X7F&qvN$1$eUDVED+ z{bAfQ5&%@SMxzmp$7AaCdIW$pO(Vt_4F-eCv$$s@wM2AXr##Qeahz|x*=$B(7*Y@f ze=lO&Hm%p|FK4D{QWQl*M3kl}sjB)viDX$uuItK81ON#kXfm0QWmz9`ilWqhBdTul z+qZmof{M)Nb1W7M2qDn#_fZrDvMj@DwW>M_y2+nwC-R%cJtH}s53O}^w1LWOnG&tD t&PFqDE@ObMWQqVRKA6=sB4rwpGViTlAx(+(e8~U+002ovPDHLkV1kb(u+RVi literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json new file mode 100644 index 00000000..c258aa71 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ma@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ma.imageset/ma@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8f7aaa323e5fe630f67db3f4ea372246746880 GIT binary patch literal 326 zcmV-M0lEH(P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Q*TqK~zYI?bJPL0znvn;df?YKnq0^K`jD8FjxfASXy}o$pM0g@C4q% z-k%~DkU+q~&MLhkX=FhO38L(*g|V3~Gr<*^7q*x!b{{@IM!Y{f_9JK#V*&;;PQbAU zqO*Vic!-&Ym|YI!>+0~t4jJbp6NTwNgh}BR>c}cINxY@!ib$HjVCJ3(K z`7@-k)Te|gW!U_%O?XxqCH(4 zLp(a)UNz)xa1da<80+NZt}(Gu;>iLA?d43ma~O)$6JB!sWZO1#dBU!b`|^&SDLWn7 z_N0Mdu}i?UL&-&O(Xp2{dGXJ*jg{tw*(%MrCl8m1`_IG|;>Ob45448C)78&qol`;+ E0I@AN3jhEB literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json new file mode 100644 index 00000000..27d9393f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "md@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png b/Passepartout/Mac/Flags.xcassets/flags/md.imageset/md@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b5213fb1e6d2da847b7de94c7fa7afc5741a0b45 GIT binary patch literal 954 zcmV;r14aCaP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x18+%0K~zYI?bh3C990~^@$Z@0-DEbq+w3Nrnhl#^wrN^RZ-O=0*g&O- zc%cuezW6BkKM0EAgAXbep9)fZDF|M$BBBK&u@IAx)P$5=8q;lXb207SH+!4iGslN5 z6;jGhU;_&Np3WS8znKp+=Xd4^PG0^B)G#(;1Vkvw>XiHF$VgWWm4ekv8l&Hz z<=Qu=SYGx#$Q>JNXVlSmvakz^ZAhqj9joAMU0DioXSEsK4XuL;DefYKKzCRGBvU#w zQ{9wAQ_EUgOXDFvSB`AKq*Ruq(=LRB)`-F%%;I#XiS!l#NTqd@CAgOR!R;{M75TVdC2LZ1Om#$$XCD}t|f|Fo;4n)9z267j` z`;(J^$Awc97`pwYtPk^&eB8>`B7D zb(AjI)++#P9PXuhsE_qG_T!lcV;qtn_%WLga{I|A9+dVDXOT&J3#C3}>mcMhNQURg z>s6FeT=87w?dT1DbG}Y27GP`3#|`rZ-nlc)CGQvil#aVGm+f^NVh@kZ|>N)Vbo$L+x@{L=OpKPI7)+2pyG zI+&h3jnk><_D<0A*q21yzY}#oj6<@;fa!&eJjcy$p~n!~j@j)+YV z_Fw1u&=ftFP0qg-B_7kudjgSFi_;ae6@iOI*!za-64thm0M)94tl!H+T_dk3q~Peo3RVXqr%@R@weLl1dodU=23Ak c<6i^$8!3fC_{%conE(I)07*qoM6N<$g82!>dH?_b literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json new file mode 100644 index 00000000..87490178 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "me@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png b/Passepartout/Mac/Flags.xcassets/flags/me.imageset/me@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a69b19675cb32dd09534ee75be026a6f05582e96 GIT binary patch literal 832 zcmV-G1Hb%X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0`*BmK~zYI&6dw=TvZguKj;0Pq%kiuOlr(8YGSntf(vUY(JJ^0bm>w- z=+0IDfZ{)((yh3#n|5PS=t7Vpu0%^$!NnAnT9TPCR@2OwWahnj_q}^uXj&;Q-XxLn zyELmviowAHG<*BIsL;Py$yx0CS^D_T_IQfe7E6#(y@(1F%~ed1GfJAl~U1 zA8k-a*Lp!i?6VLjQm)o>>=6G8ZoDX-KCy__Jl@N)hB zc;v!N_}_uJ@5~_&|GmI`1--cok5^zhLK{2CTm*p3hInt!4FyvAYGkE~TldjZG5O*I z!D}^ws!RV|0}&Xz@D$lygSobaH{;>dePpGIe!Er5zx0X7@o`ije4&c7)}y%8M2+H| zUBElLfEr72xrMCn5}ujDBFOT1S^M%J&ZH0GP>92k_m|N1l%%l>vl048MB3<~t(1xL z%UB$69b~e6EtJl*#^N}Nw}<{xjf?gSPyDgTjm|t%UY~bgyoMD)#DXen^zcD&1O|$R zAT9)_rg*G-m**EY5P?oV#CtBr@svCj$Q5m-hYymk^{E`IkPixQT#AQ0KKuC@e9fs< zddLy5lL2|6*n!0jh5Vb%^7|~E*f9()w~@q>_boPu_l|vq2@*25Pp$GR)+j|{At^{N z+=gC$_#nEvjVwl(^FLxPHgSJXS&CD1e20#2Se!J-=78+e7OhXZbl-Rsb;`G?@_l4G zhtT~iUK+!xhXk#J*N=l0hwNq#XTCylVw_-k8gD|#o{kAu54n#3*d2ra(Fr6D$UeM< z{L;guitStUc7plf7S5pHXxJzEsY}q_E$uzjqbIA|n58ke)I^SkxTmXV0V;~W5;M5o zL9gDyT)l%oj4{JLdd&nrUV~g=Bc=Gh1ID76#eCOA+U3jjK@I;6NbS8)KW}5McL0!$ z{X^^zuc8OwR0F&xCq@F`R)hN>{>d2sWIPg(J^cwx*&6!3byZjZ0000< KMNUMnLSTY9@s~;f literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json new file mode 100644 index 00000000..5ba2415f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mf.imageset/mf@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62d74b4234bbd0e63fcc2d2c282acfe986a5e93d GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json new file mode 100644 index 00000000..cecc2130 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mg.imageset/mg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04f7101f6836ff6d352acccb903b7fbfebc62dd3 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxN<3X0 zLp(Z@|NQ^|KZ}j6O@J-wz^m4F2`lZl9YNkw5r=vHgTe~ HDWM4fZ;(G# literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json new file mode 100644 index 00000000..34eedca3 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mh.imageset/mh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f0439102eb5c672834011ccc6d965502ce758ba6 GIT binary patch literal 1394 zcmV-&1&#WNP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1t&>FK~zYIz0}K7(^nM0@$dcRMM6lzBalQ0Ppil)2nzMxYPAceV;$RR z9i3^bBUPs^+AdwS&UDl1Ur^g&?5@?KZrYBuI^wHXc?6K6@-h)3k`M?V4fueD9U^p&%UxvAvPEFv`bHtoMAD%6vWzG4@Wj$ zz+s#)tLICUgg{mloDLJifiRLJkmcvU8iQtv&a8xDg>>dU}SM4XXc&zo zv$MRDErtCE@$Yw`V$8aOf~u|PlQi*MAw(j?;~VFdyfn&}WMa!mp7RgW%zA_n)VdaN zrNuiZ!jTfGCNGN9y#jaX}n7!xF{Rz%B4ct)!gu+v} zyN4O}htX-(I5LeyqA^mEwX+JNQ!zY4<8<}-X}RIUH!=Z$UK3+)rJGewZ#*|>*-UoT zdpJ$A2cp+E&aqP+{Bog(m@In|o@Qh;!mo`zWMvpI=ryb?vnLeGio(tQ06LwDmK#0- zV^M^F0?R0$)LbXa7zSWkn+;13P+C|p3()5ca_m$GXD;_LGxM-_{xi@N1+r}^oIZPt z54V@mesdUWngMf)jNn78 z66ehAfdKU<+c|f2V9vfufW&5GZV!yIvfNI6Lp!h4IC0ud81x$M2O?a!b_cauBGr_{ z9nW13Rb8XPHVnYHVL7Q4dnvP}B^+>TAV7UXJLmrFpLZJ18u76inM=)Hs!DA9aJqwy zwRsd|TWD$@q}MZw({3W>@8rma7R%ljRg2pw^6v_ZH&pfc-{3*AN37x{^}TdBEW(W zSy2dvCIRU821z%BIp}I+aaw>0O&;pv15^|`Q&&a|XJu5`7j`7iQH*1_;?i<#TR=u0t^b}-8;Zn1g z?@qMQ^_+kOA^EAJ9I9!?Vot{IJWQpl6j@RD<7z)gkGIk14ZaY-V)>Pq^{;#$O6x z7NjI|gu0rWCZ;UH Ao&W#< literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json new file mode 100644 index 00000000..7d460ce4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mk.imageset/mk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4ed77d00b90d65eb75472125540fb2119266f1 GIT binary patch literal 1099 zcmV-R1ho5!P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1OQ1yK~zYIwU=#ZTV)i-fA=P9Zj!Z4s;GTgSGw5QF=b2;rzi-%GC>$C zs1!d8Uzi^z>Tt?%ABL-uq|n`q&I1D zuOCisZ*p^Q+M*tKxX*cB|IhiK=bYy%;~P2J`3CoC{VYiSXZY(8Fs|S!iXYa+LDfVz z3-CuDnDgFq)FAYH1mRolw!%21c5zJ2|3dccX1ILN?hM@wJqJMzc`s^~pfG0ZbAK)Z zLW7JIRa+VCax~0g}&vk(WW?TVVAEpai@ZpBuI7`l$CfWd(G<2jSaA zH+1-W4@~W__fxAUq=yBeen#|_cUHhOc>wv{ykA-!(6t|0?iJml!a8U}AW%Dx9KZ50UU+Lw8{UiW5+n z5IPDIP)@r~@(Rf~<7XmT)HucJP{sIZVvI14>hw2b-NqGi}iAtG- zLL746L-@9O5CHx*Xt@WnCm^%|0)5c5T8h>O{%hR_YQOjMvkr)Lg0?}?vnOD3dp!sMt%{a9iU6|=$sI6zO!UZB z+rkZjR8s+P+YDK>lma4K}`ZiXXHaY+dUYfAJDShjWiX?v&kTQ5D`q>p#A4j#l+Z RW{m&<002ovPDHLkV1o0i`bhu) literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json new file mode 100644 index 00000000..1e84e5b8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ml@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ml.imageset/ml@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b8527fb95daf4f21f492517135f5237005204611 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5N>9K$5kNkA?00Z zT6fOQ6>oGF>Q2$L_%p|O3KU*pP}EX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0$fQ%K~zYI?UqkS6j2<wD5MokK}zuTIJ!iB;Lt3w4Ig2X5y zBZ@+(ThO7vZXSvt2s%i&JcypGAdDcWus~c%kw^$pGsW5scQx02+fD~-OG{@)gN^9> zn8W+c@ArKlc<=pYM5=>k;0PI%DQH$Q3GlQ2gUr>^L9#Z_JedX&dFK#$XEO{U++fsz zaSD{I41%nz1~m^<19A>8$x1!_F)%ug`eHG~*Zr4EH-Hb|t#KuKsjsJZF+MpYN7de> zr@%BRcUoMWUCer4NqW9^=`W=G|;vQ11l7dE%18WZA)4X^!A3n`Xw&o>2 zD<6TFm3z0Mk+Jv~6Ea3r#)!!%Q5oaWa2uWB&IQ-81PO&h1apH_6<1lM;&!v=GA-&VfuThlh&Ms0g7k?F`U zpeE+5*mz=`3op;xhHwM|(DSLAnx`k2{xY48iErb(5~&0ypVbfwhn!eD?;|oL(OvUz zkEUo$C8wO)qHY>gMkbe;w)@C_|6W5N{PVpR2o8BF`X0Z(7q;u^nGz%F&0Fefu-`|r z>q=nPkGX8`z?2ew&(3u0%-|OP(Q6OwT7ux6<*k`3eR~-IsSjZ$Z`>x{IHLdi88frzm{c?(c& zCs{4=BXkYp&62onGR N002ovPDHLkV1i7WF|hyu literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json new file mode 100644 index 00000000..adc20ace --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mn.imageset/mn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..684cecc96821d9741fbb9d73bc515c287fe5cd83 GIT binary patch literal 458 zcmV;*0X6=KP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0e?wEK~zYI?bba@LQxzB@JH{9-t_u*5i^R6NFj(^f~X;yU4y2k);>a? zAllmc1d(fFLlHLgLYPB?&=z8PyLz+x?zJJZ@D|+V9vyt9a}NLE$8*kbd{?=A(TCm^ zT;wRVj#FXD%_z3TN9@(FUCsJ{qTkgdfs7%88Ewc!MgPUIjLY~r$!F)o%pH@^PPr| z=^?V*@f`3kL@Y(2zXZ^}4@0_%5Q8`#Yr4<`H?M+g(qM%yF^Hp)u0p|hWf971=-I>^ zPDtY-2D!|mekMS=<%vNYSCd$i!A)yl8;Y3Yrx9DD&{ZgiS5f#`8&-!x>yC%@LBZC& z|1IK~(FWDFV1Cnrd192bQ=6aWAK07*qoM6N<$f|R4i ANdN!< literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json new file mode 100644 index 00000000..f46e7a3c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mo@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mo.imageset/mo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..afeb2408517864105d832b8e2d86115ed7ab4902 GIT binary patch literal 777 zcmV+k1NQuhP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0=`K^K~zYI?Uv0;R8bg*pF4Nv&N$utm{PHrG8L66Oz1-wDyS5N&^OX5 zBdA4fixv^|2egYmb``Y9Y;B9c78BA?nWG_8sD%dOj2|^#o!i`d?rkAWq)^w<5TYNP z&3WJV$8*kk&%HIvScGm_KHE=D=GHL78fc%0dVvE zR&2Tj1IhOod@(#+>aWJOVOv2V9lIJ3mc@fNy^PKzGO-`IPUZM$+>%Xa zV?RNE3fl%%@p0$qX|6OM;%dubZXM~s?@_RA2>MfWHumFQMiV;*F>Q(Va4j+23&7^Q z0yg+n+%6X$S*A!`&*r=W0AjkA_HZqxEv-HXfF``0tJ_aYd5E}{WS!#8#B$sU32m0v z@(^eD?n4va-#9ImOvBE0Btm~mEK+m1*m#iY!V(Tt*3h)A3R!YdTCfp-f!G+0rB$?6 zY)AEasV&*UQ2aCVM%n>}G~~Eh=hJD<>~12M7s$+MX&uX6=!3do8LHyT#6HeUay|US zslD@~Neh!l0})1NetsuZ#YaL*l9-$Q1!816!Q;0tF@$go;&?~W!sK?Ohw0QDb-{9q z)m(msQ_xJ677vX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1tm#DK~zYI&6jCxR8V$wRwajaLx=D-a*El`cM6YQj=!V*2e)oV{uq`^;Rr)x-jwo;6__UPuY! zr1o`6nrs|zk>M34w&)WAnHeClF<8Ue7?GRD50ID~L*#;4DB?CT|4t{JCoiB@Xoyd+ z(S5Owr0zV{u3k!nI)m>Uy_ntOrx{ma4D#@{N{`NR32XULmcNvPQ)XZE0bssxBk9eaXD%w~$|( zz=sts0_~l=9CZs>lz`Xg#WC2;?y@+(FhRCK#qQjlTsxFcPSzvH9d7b!9Akovxq%y! z)vOEs8ArnhcrsSA?OZH7F8MHf{E(0#7e!)XV+aWj!Q~ueK-AFe((py2hR46L60tm$ z!=L7{W=0&DI%%pPKGMQv+${HSSrN+NrX;?;J|yoEg0VR65FZ~;bZj(rw`I8H{tx_> z_8{IZUr3wWM!%_mC&L4#1~T1c_A^)Ndp^CYY;Ng3xM0Fl!buAUJu{uZOh6@CTYz;i+ge z8lt14*|0E%Waqtk`Fs?bdT4e}!>dcDxAsSLk+pG!r^@E=|Ssw_&rDyke2v$NnjO@n^J-s!b+%xWiv^#^cyos$PC zZn5LWL49)ti<80$5Iw{ES+flQbai&o-`@|ws+obqG@|6$yi8`bz6y+nrT zNnW&=Yu3^0r%3uU8vx@-m%z;F@#Ln>qrK)dS?Q@%x8J7SE|8^{uyr)hQdfl_2zb3- z8tNOUHiLQK4n1x^vJLRgiWq83j*z`_GkeZ=QEwX+3Gah05HefEah_#M6gJ`>hcTI{0FV}S{*#FRh)n(PXi>;`5#tYk_940uJfqQqY=C8vdj47B|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json new file mode 100644 index 00000000..d955ef9a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mr@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mr.imageset/mr@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f26b046203378065ee264dd027c551a4eb2a5e6c GIT binary patch literal 674 zcmV;T0$u%yP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0#`{yK~zYI&6dk+6Hye#zdJLTre-otIyFMmMw2cQ;=)CuL=j36K@ePM z7rwGp2o(G)#H9~(r7OG9N)bdsP-x=|q+Jwj(O9ER(i;1S&7=u!l9}tGG!&CM(@Z4! zHW%ic`|;zRbI)8d;qMh3q;^l1iNbYKtL+s&Wr;$ryV=? zNoa2#7EaX!(JT$iPz-eEFgj9^?s}i5#JIb zz9rodL;giv@h;;*Ollm+(}WGtw1B(E61W{o!fM)i5{tZ2$$PzE#j|8}Z`G2nIYKFL zaomG?z-v9sr07*qo IM6N<$f|&*>#{d8T literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json new file mode 100644 index 00000000..1bf53365 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ms@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ms.imageset/ms@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7f357cf36f6d5338418526e4a834b20c0e0228fa GIT binary patch literal 1383 zcmV-t1(^DYP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1sq94K~zYIy_S1WRCN@`KX)G>E4v1Wyd)lh55_kliBgi9qgHBSH9iYO z9nHy6k+DpzloUtIk#U9@bH-AKW}R|0Ck+J`e3A-?AZjei8w3~GW!ZIi@Ae0R5=7xh z=f88#_x$eX-t+sN-xV&+UD7mc)e@yWbUd3kpJ3m<3`EgRn@yQAlh$e-xm?P|pMsBVP-P@7cRj2ha=q38hQ!=fMj{%#hbCFsTc+ZQydY&Sh0e_ z!mT7EOhYP_bXnx&BxlbTlQ`^og}#^1GDxGL*n1RX#%$;K@w^uU0m!~kLfE(WNuLo< zO;QrI%VXJ|5JgtjdVGCdI~0V4`ID14lDCg1tDrW~;^7E1V_)xuN3lCFM8JLuW`>Ivg&1Q@Rw=k&O(TNV&?a$`U z<-HkjHmm0#^XDJP2O$_>=FH)wrY^*xLd)G{%aD(IonL*XGW)rLZQD)}A3qIiZ4C{d ze2jJOBI16tk&|=(g}y{P2!M-=f*m{FCoX0@wYzt7U#+HW!8&4h=MfT8%8Y9Xl^z$FD{h28ACce$ZF7IG3asf^zINJZZMOw z=oqr4ODB3ICeFdRx|BPSkx0YFvn?=|qifFt5EA0miN3I~iin7vtXnsgt>2|!(VS!4 zh7DXzSj^&ITChk3GGB`UM=kmL(_9*WtG@GHWnl~LR1WBwc)%}Rf z)YQ2(`#(Qa>WaxHPngNo^_`FLwQCR9@K}Xv)VbfGcZ>@?Kf#}XWf&7cD(Wruv%w^}dQc~QX|LH_tETtLxzkpC|rf@ovT zlPa1FM)v1qfz9&&fCzv4iHT~+#H}HN%En6QCxx=khe6gGAfnMkK>eQpOws?&jp7zg zm;#vPSHc0k61T_IsGjDX`ndES$fHs{2^D)#nwmgi$K51SSpljM60r1T*3F-pT$BdD z9}ydYUTV#iOXbuKjcRp_0>hLN{Qc}WI|3p|<*lvLIlGg8!=d*;o;S$zW{Cp@Q!EpMb-cS002ovPDHLkV1nA#p4R{X literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json new file mode 100644 index 00000000..a8e9f635 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mt.imageset/mt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..614eb1f8c44efb5e140e4c0bf0cb304a38f6ddfe GIT binary patch literal 449 zcmV;y0Y3hTP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0d`45K~zYI?bN+517QHi@$YlJ=Ps_=bV8KGA|eq9Vm8=p!e}vD{3#|T zv9KT!5(eTW2AharXd*E-w9;^mJAJNw3{8a68rqW%{jJa2C(rZbC$!dEz$|s-N{D)v z18f`h?$D^1wFWcCYrMUr0q7c^!R{Rh4N~()4pVoWxk*l6yUAYfgogMN@}H>+3Gyzc zYy&_Df%4u%g?#%X-pvK5@`1azDMWmTh*B7a!HL_;{;E{ErNNGU(( z>SEp9Q5}*99&o)P0EX3%>$>>9Uq%XnsWT|w1)$xr8wwHCn)P6PiM-WGu?VG7384d~ z#)nA^jQrRn)MlNUTSR3qDHIAQrI?7Pe?>GZP17SaE8fvLvi>tdKqO>yO~~}ZYN&^Q rP18J03sRXDq%ti?Wm=HRG!5hfMZR&(KLl;w00000NkvXXu0mjfDG|gW!U_%O?Xx7I?Zi zhIn))*R0Rm_sgEynd2}6lN;Nyt3J#x8Bz>h36y~Ffk}V7|B6Z<-rvpqvSU6^&-w_y z|BuC!6A~`Sd$b!E7~PXH2{Z<&&5${CY4*nVhW6*rHv^US$KRN5@X!A6hFOh;3EH-7 zZfzI6_?dgGSY$Wc`FZxMSHsKm4cAQN|83fv6u9@L(y;>{>Kk55wO!oB23Eu))y}}+ X;-K_&Mo?=y(5(!fu6{1-oD!M<;gwuL literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json new file mode 100644 index 00000000..a4662e69 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mv.imageset/mv@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa9d896ecf311401f5f21feaf039d3500ebd28b GIT binary patch literal 388 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81Fj{)L zIEHw1Cht*6*fguLQL!aafl>K!)-uLY1|f-34l58&IH&B$1z;p|LJ~iIc(=o&Wx`6tQknYH!J~G}>TbXuM{} zp7td7fF}Z)ae{64>;D_<`T4CdLH5&|&(dsRX<}@Fd5w*wCtj`oE%EQq@6!S+Ut4Y9 z+xhjIq4T$Eacx!YDs0)7wq3GLf#2qqrYRqO*e)*l$23Rs%h6DYbNhE3EqH!cxb1qp z{e|m_JU{?sCG7b3i*f0(2W1^M!r9m+FaNK(jp44(B-uwL-{qSx$G#C2(LJyrldZ>! dMHYk^7$&U_PiwfnA`lp?44$rjF6*2UngD}Jrb_?- literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json new file mode 100644 index 00000000..7e225184 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mw.imageset/mw@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..19ceaeb5c4b11673302d1ee3f05fda10109472ea GIT binary patch literal 574 zcmV-E0>S->P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0rN>jK~zYI?UFrfR6!JmpE)!4BOx0kK?o8H4Mw-Iik%S@iwLIDN+H+_ zf>nNjzre;u6tqx+wOAN1La-2o*oZ>VZ2XAvBe+R+v-i#%3maYa?rxz;u}^#EoO#YW zW5%6S9_L}04jB@|K5G~hgI8D%%4$$P1nqPb<4%@cCk+CeN-PtxP*eCCl(G}nRC(`} z{Z?34+~xeNxxP`1KBYuIBAmwFwyYB?`_YnhfJd&Mvr zTh_u4iMh=4+ABvR;Y{i%TOk9U=Yg5JXSU&4w1(rcrECpnQ^&Ph&Zid1v=lj?S}gE3 zDEAwlsw%hpV(%eiBbaIwd6vz~Lgn&BIsQexRHhLf>yr|t{yk)q;ZCnRF%H87tA zJ_hA_>34~rxsW=p^hH#>GM@z^V8jX~Q@n6tA}c|8u;uxt${Vi;Fujp6y^$3TRUiWv z^1zZ;5(AAE-^AQ2MGrUO#Gi_Jac{@`ZR-?f-9#*3)U?R$A7kKi;UD>*bVZu!iZruh zMBJm1T?2Kuy*^1E2HlM#L!(cJ`?ghNtWq7_F;CMKX{IaEOjo3t@BJ~nDmy#=`~Uy| M07*qoM6N<$f;}z)WdHyG literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json new file mode 100644 index 00000000..44505f70 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "mx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/mx.imageset/mx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b803ff290aea5dc4fb008d7e3faff90c3fc75b23 GIT binary patch literal 454 zcmV;%0XhDOP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0eeYAK~zYI?UXx9!%!H8pOk35wBA~!Rz*cwDpbo7P}h8I_PNS>3^wX#LZej~E% zCU2U=Rf*JV5T&<^sNaW?^AL_kNNZ2j*Lf*d#n#n?L!*qhC=86uFj4zXO7dY0PNGQ) zLy}l|Li$4VO!OC!!9+u>b%707*qoM6N<$g08*L+5i9m literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json new file mode 100644 index 00000000..ba9c8ee0 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "my@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png b/Passepartout/Mac/Flags.xcassets/flags/my.imageset/my@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd19357d19aaa4b0988e634bf704632eee4609cf GIT binary patch literal 949 zcmV;m14{gfP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x18PY`K~zYI#g|=7TV)u>f2TYBK84akGd8|5%7j3X2`EOTi^+@^GQDud z%w$oMd238|v8zRIjEi0w^~(5>DH=(uh*Ay>(AjKQ_V;QJ zW-?aM+1*jikJoSe=5dEP*c-y2&oX_b7Wq;=*{txN^Q`^-bX*wL?4iiAM~sKo5`Z~h zG#gdkKQ+nWK|im5a35cMyN^iBK(&-&C!xntm1OOP1%p0IDy=ITmX>GYRA6PlXmr>Oa7*OT{ty78Q_cUn3hc6>hOTi?|zLM}HWX47h6(&fck03PVt;Md>k{^^15XLi%o8m8MFroAOXGPR3~ zzt{2ES$E+!0CH&+b!)2x5meE2|ACtP^F8-d19R6LoH#bir{iw6wvC0;e?8SqT}=|F zJ;}9|YQ}wy)Y_9pBGTX^^j!E-vxg$feZry66VdYv+g16ZyK$TGcgBb+23~y4%j{KW zA>eW(sIQGPd)0}{kzgZiE*d!4D@)AzZ3sw#S7ksmo_JZIPczkcOGii^ZBzj&ACh@@`ETf?X?iReZ`l8v9*=GZ@i*8 zr^s@X@X5W8`;t1tKsiKe^jSPrH#O(7snj{KefDgy91?l9OG*h*Av!kpr*&YUrJOQa zQG7nXn2EX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0!2wgK~zYI#g$8F6Hyd~zne}|5<4+fqGBJ4@exHd2u4wZ)e0>|=%y51 zD1!Tn3o#WJqPE73=*l8R#Dz$uPziz?E7XdjMo@}`ND)mcS{scoZ1cJ7(oO4F>?c&YlCf1MEVw?nbOwI|^Cw@5i%s>#p1W-KwE0od{ZUY>*Ypur#jwkhbp23KxFW!gXx03o4s2p(L5<#GK%ltm^r0YB$7 zc;7X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1O-V%K~zYIwbg4(Q+F80@o!7Zr7$Q$VVlf~xR`-llmaU^-5fB2q7&;P zUSRG98pX|JGcy^>Ug(fSQ-b(rX3NOtvKPxDf|OT;1m@UM?qEeBX26OA3UXol3zL(}YgUs90Nc!r#3{tf-GZNN3Qy@A#_>Qb^X@JI zo)7fl!ifZ;J!a_3&g5x*{hIroLM|S>iD4)dfbB2z^2v8aYwj0|L}aIKr6?zc@p3Kg z#l_fWXPv?wLPR1vSB`3FydTZk%pVYm>}c=iqRlJigUa*RY~p|QgoVhtn6GB@!~l;{ zlbF`)odT8*;AlY^Xr%wiMvf%w@b)w#^RRF1e0}~Ee6D{< zr%ELVA(BY!4igy|3u4wPWo*iq&59ua#wPu++r$h%-LSkbdTS7$=D$q9!*=e+t1uf3 zE&~7pG#Zpwuj(B_7HncXB=hLn5*eM81JK+T&bH?sGjEmR?Iq>?12G&_JAJx5lGIGMv5PjLjF4w$ z64B9$F407Ob*x|nfaLP2RK2CCF|;!#8%uAmpk_BeKa^LlFsV^5rZD=uV8Bv|2hX0_ z*1dbTV1zs?i|t+Q=n_r5Rjv9@2mpz>r$>(6?s|h|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json new file mode 100644 index 00000000..a8058c48 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ne@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ne.imageset/ne@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea65c4819b29d2cf38fa1bb901a80b5d70da514 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81FzS1{ zIEHw1ChxiT;!E%6M}mHBj4bzgbM_hYE@7T)7-oFD^6}>QtpCCy%C}qo|6izP zI4Spt=&|zk5p}Di{yY*gQ;hsPU%XuM-dX+BAB8^|n3Pc04`uBn$7_GOi|zzfrMyf_ zSm0&(>BZ~I-93Axw}cxT7_>~tS6f-cKQ1QD`V-g$#3`_=3 LS3j3^P6X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0y9ZOK~zYI-PTQO6Hye#@&DunnoLZjCSt)?RK$oc=)#p~78Z0>)Ma(q zoeS{`h+n~_=%z&kE4UE^7j3acl2Y5+rfmvInxv*CO=>bTnM{(IjJqP;)M=Uo`t0uI zaQJb#2aeG9k`KTmcFDubgX6CThVSfF_ivtldOY!QVdVCIl#bf0G;U`O7Q{5omV4|A zWF;MKxkt;8nbj~;$+7N2B(=k- z$5~8SA7#ssT0>(w8>Ofg$knr$4N!y<86}RlrBU{Y27gE>j3{Sphz8GOenWL(! zI0YvT!AZGULe@(prB&WfzvYjz)jo*UsFGF_7&Hh5t|8hzXo8AtlxdneN1VqHO&?y5 z51U}^u^m>5y)GZ2Gxu;I;y)bViD!sNYKkqbz|hTSTse6iK@czu1H0YcJ_tZ4*iR_f zzkSy9D&h1bS5Mv8zO#yeecDHU%ho^V&RBktow*-;z^&7FyAKgv9z>U?Wyrx=p7$ev Y0dV2&f(r@~B>(^b07*qoM6N<$f?6sjqyPW_ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json new file mode 100644 index 00000000..7dd8eace --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ng@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ng.imageset/ng@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..31ca8c399273e98375fa7602ed015aea191ff53a GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0cA-*MmpxJT|bjULv_+FmxgYydZE>3`5{u057^``>g zC`7UpB3TNNEb3@ysku}u8wXf=NQwqAK`PAl>Ud#OZ7jRhR&yrza1!|>W1q3*0-)j^ z%C4Zw_1sx!?f0tD3P~Igjk?(GBJE+q;~>VFT16)#lE^oSM41dlA1^pltDIjRb9HwI zj>KPCqqVh97(5|M`7dlFB1R&(Mi@jIT|@|lRMW)a8|gW!U_%O?XxdOckn zLp(Z@ZA65A|2W%u*@%ak!$s%pJOkb(%o7f-aJ~S;jE_${yMO=l`{U(G1=)i~4sL6A zJ#+2VUk58Du6z8mR!Ej|SV@4e316aR(Z7WU*2mYgT@lR5(P`2No-TXcqVna*2CE}Z y@qWn{T+YJGeNcGfz5V|>-Yv>?fB*d!W>{>d^m5z#FDro#WAJqKb6Mw<&;$UHi&??| literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json new file mode 100644 index 00000000..8b291610 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "no@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png b/Passepartout/Mac/Flags.xcassets/flags/no.imageset/no@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5ef869e548ef78051638da2f5fe833fee084fa GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O^81FzR`_ zIEHw1CfBS^+&QapqGAgpf5O)7Ne|}UJN#hQjpG}h-za4Rg0{%Bg*=*d%Xr@R&iRn3 zDz+wVQJdx!hQ)l2>@eJXOi^df&y}ZqgdSCh8hUmlil(Qeras79z3_(M|G0fYX+Kvk zRz9|1xo^bR<@r4I|NgWV@2~xT^uxo~{%maO>|L^l3LbV@EcUN>ydO$CM}gQu&X J%Q~loCIE|qoF)JO literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json new file mode 100644 index 00000000..a9a83e8c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "np@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png b/Passepartout/Mac/Flags.xcassets/flags/np.imageset/np@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0ee9267dbd78e1dfa42804924ff5f7064f6c61 GIT binary patch literal 944 zcmV;h15f;kP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x17%4>K~zYI#g>0e)MXsUU*GTjLIVky&dZ%#PBu?b3T?xdOm^a04PDI@ zw7iYfHv0p({IxmSj(N0(8L6`~j-_Wo%vf!0mo}-bQEQli!vbbQJf_Ijo!)uCdH3~r z`h$5zWKef-@9p{H`+WBP?6v3F=ly)y^i=gNYq>*=j)p}NbygN5K~3(*wUn%`;%oP1 zk|i17$@@2`z1F~&mVJ~K*W&e#BnJdQN0gnn+j#MtdbZ_NaI*efazGv^NBB50beiFs z8eVw18jr`99FU1k!PYjhQ3eXxaSbbRhX9%u7W@c>9JoYQLJ_qk@*~i{p4cxn@B%Z`gb*Us z(<3gYrHQK>H;PV(trOa1;+ej|sZ^vE6`?g633YcfcJbo04Wh`jrWf$rYBTRQS79(@PV4yxeWw2F zmxx9QwzUD!&QcD|+rfHM29hLA+iA={O66`B_PUo@x$?39Orm~RVFQC4kUQuzmg8)- z&Il$RO&(uaMpCQM==DfC9p=$rFrGidu5I-QA?5}|m7b2yXe8U^!r0V=;rMapty#nK zp>DD-G*e;uU{*men<~AXk|g@ptrOwF!PsDrD~brX-J&l)Uvz?~Nn0x_EGH6~9aD1z zAxJGOL~Ag_0424WwBlmq1q%Qu3I0sx7pJHycg)Ix$N+L`D%$MqsZ~irmy-kX1n-vM zB_93!6xP>H&JM`<$Oxe;S5R)=oKy^Tb)gIm!T6sq@7B9Np=))qXXl3r1yL!zn^FzK#IwP2!{#x_Tp=7t#l& Sqd%+w00006P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0gXvSK~zYI?bS^v!(kl2@h|;tHq$~@D=YiQPQ<(p+z6aK(0Z7o%FkIvInUyNgRODT&aL|ZKo z4eTFXu{6<+CN+i15;J4d>y%kd>`DRd?!$jBi3&;6s+hL7lADu>S|wmMWl?I)p|f{} zwe7<{M?jS8o0XA9gRPKAj?{v){X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1$#+EK~zYI?UZX!lywxwfA701%W_*Z5q1X*5EDhi+v*rts}rdyZHmlj zGTBUJsUwq)DNdQ-NP)^Ugr;bYV`gK*dO^TTCTOH9ilopO${3djW>n_Xg+Xp5` zl(q3gee(JA&Uwyx&U4=XnIlxk#ohAMYQu&kCW68pgW)PkNr$<8yA@YRO?{I@or)>NeKZv2)n$A8r- z+Pg)zZas~^zYp(E_ULygtU9=t+I%JIkcPp2DE zFXZK2`^jpxPj@(+baq-FkSdiD{frl|B^R7Opu95n#r zXk?7>0-jne=F(CeCKEE13Qw&TNs=fmtfZl#qu=NA@=}}=nzn2)_O!N6?*D~dqvqyc zymiEmJVb_?zxe$poWFhA51%S_0Mtg zM>V!?8Gkh@38lT?T&G#$W~{}f2>`)dUS5F1@%j_9`oXWKN=exKGk@Ik0U*@3ll^O6 zX6$R)ri0CK=D6)J{Sa1psW-)wJx~iKD9vpO_dfdygb*TQOFvy^oLK!~H7-oo;J= zaq-PS08tc(iyKdR`aD8H2Gi5h!kvr^nlm%;ijKy8T?*SzH=$A~Nt`y2-=|FJBN%Qp zvg<+@7cbssvq`S64H7?hmA=pTcJA>Fq4Qp!sqJEf@g3KLLls zNls1~5fRD6#%`yg&VnX6nK8As3|h1Z`?^F{R(y?d&rIUuCp;KJjEV|tDJ%PgLx+|S zrtzdHJ)O#7!?;&afPeNLj_EfLkx)od(&0V_4*&@ScL7n+`~5JSPKo^d>r9-ON_>1a zztwaSuy!qD>gw>->ydx-4yo-qoXC!4^k{X5eA6ae@_ zer#HEg2u*sPu#P%@9a>X1tY1Hy@oU%Ow`2)-GBXKCdYe@X779Yq z-j#Wl>!s0>*(w)<)E1lOdCSQ&wVJ!_R)s6^$QOsSO&;OVX}eTD_~E!>^0?Nkw{2cm z${PJ#)e3?@c=(|9=$8UpMG*;`P3E}O)*zfepstxZvGMsQj`bg-_>#u;W&OYL%*dm7 gX5>*kGx8|@24Y(v>J#8F*#H0l07*qoM6N<$f=V;Xwg3PC literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json new file mode 100644 index 00000000..202227c8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "nz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/nz.imageset/nz@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe78b9dd1f88487ddb6451e193f59f75d1636f9 GIT binary patch literal 1080 zcmV-81jqY{P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1MNvfK~zYI?UsK`)O8rgUw3@r4i63?eoqo4K;R~j0|_z_q9rw4SlcQcGkSN)ra-pevL9Rls!LKap7t+i;!Ac;1KjvPh~v=sfWnixrVa*B-X5U znKw!*m9Xa-6*ck8h|*NxnSB^-WGr>sp2a{+$+p=aM*< z7Kfd!d`>{Hzbn`Ft4P&;iBm)figz=3<#;tw&!3^==HTK%0Qv_<*?p>xZ9{?RY@KP{ zv6o%$<7mE0;Q@Qa%;v-mD^V+(@EGo4)!7^hhwV_so#5m1^%#vtvqcsnNnuV=yRW0n z<4)r;xq!lG0HcUeKT7MqLsq4Wp z%N&PVQuS1lUZ}3N{zvWnrBA}QkgXBt*q@H@BE#4~i%$s2#hvu@>F0n5lYYMAPA<#M zf`}t}21?5j9PF`uG;Cgw!9g2f?mf9w)kdsgH|{4h5j8*4`)Lt_s$h;bj?voDKa;G!t1(KZ?s-=ez}U@2H|Mae z;frK~eypS|^)R)*VMLZ&@_xZ}xMLbdZjZA+{Sx7cAJOq-JRV05u}?;CW5FrR%wEQv4@8W1fe2gDfhH)y&H8gZj zP@Cw=q!GgNO^>n(sUX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0ZK_kK~zYI?bNwS13>_X@o%z+yQYwU7*L2;(87`p~iG!p`( zMIfs@QRu3`e z7ciGr&}OF5lC#+Rd&sJTwX>@hB7{K1<1`)~(c=TS7g_KC+g1kA0cv*z0F2c&s<|B6 z$SCer7FnsNg@{-TV{sWLbB0$cB5a%9(+stIp89=32_yobPfp=vPVh=a0Hovab$9^L zs1gK#`12oWHL@%)&A<>6ZuE|Zt_!XkB%~2(KT}f(@fSk;bq%DW&-ZCi^4c%k5C2(T zouQ5(w+Tsh+zSkn{1Az*d72R7FNF9DA^yGrL5fvtrpr~`00000NkvXXu0mjfxZ|v_ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json new file mode 100644 index 00000000..ea909961 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pa@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pa.imageset/pa@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..709b52daf2dac8cafad9d1fd905b1fc75cd14ffb GIT binary patch literal 577 zcmV-H0>1r;P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0rp8mK~zYI<(9uo8(|p7KbKr0NiaQYdmsdH&>>9}GPEuovKDj@?7tum zPA(2E;*YVTDC*>(AUFy_v$(hkmSD`%tMms+${{^NP405Zbtr~Xk2BDXHTS;LsXDfYH%s0K{S;biGb88TACh5di!O75WZ|j7^{^q(;sS^tM@5OzM$6fhID4qW1Sdo7r09%MoNjyK- zBC4vpI%N3uTf(te`w$}|nz*s?d1z}(aRrjgePAf=YLIg+S$sG2bU+$6H<-oZpbrZs|qG&4j0;$m}4nw{nO!UFj1P0^Fq-0Ao6F)vnE@%Q!dYjYDU z>+fsYO%Tg4kk{AgNhAP>Oia+wG<=f%H^MUzAsB2z00agH9pj&lp|z?%a|oHvw=iK? P00000NkvXXu0mjfW`GI? literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json new file mode 100644 index 00000000..88ec7f94 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pe@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pe.imageset/pe@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0ebaefb23be5f224242893bf1497e549e09324ab GIT binary patch literal 838 zcmV-M1G)T(P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0{clsK~zYI?UX@iTtygwzklZKZnm48t$rr0*kZo9kL-S=jG52+Z} zP1#+xw|v7~-u(Z}_ul`%kqbv2`datvaevT*fGQwLJ5tX+!$AHCV(}5OxmOUAXd4Hx zdHNHspFFke`c6dn-1u>qlG_Gbun^vnP`PVj*xcaOjUPKYq*IK!Wt%$e(LgbmEwUvY z$y7_f;-YH*M0_sFNZCLdNPt}nFl7Ux$eqy+RY$#Ysed9aPT)r!W+{M};s-tQm&IJO zDBHcVn@n?Sy?-JCU=$tkm<@x3g5KwmlEJP8|3Q7-#5lDtLMZ$lTq6bU+CobOe5g z#aacT3e%}W_}Z7OX_}4AP0FJ6l3i-FY1UnFLTYPNG*VO88Nn zu#lkk)@yuUFEDjwk=MHv>8iy=goj7x*(Aww`4Z-NhkGo*?1!i+%=jUm8=U0L=@VUQ zbSVOmiKqGC$u~IXE>azTm-y1l#1k(PzWqL@%HNQGWS-PLEzJ(*4?fM|Mw*{~|ALX> z12|WwsH>cr`;gJ`sb041O#~o2G0RI6v%RMOkKV4qd%&JZD|;fX?1{AUH^pWh#=*0| Q1ONa407*qoM6N<$g5qwEfdBvi literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json new file mode 100644 index 00000000..3f023a1b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pf.imageset/pf@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..399812c747f02c3ef448c990c868bbf652c1f696 GIT binary patch literal 670 zcmV;P0%84$P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0#ivuK~zYI?UvC?Q(+i~pYNRGHm8hjn%W#2C5o+Cnj#ixq7X@SVOQN1 zhTYYD|3mZ#M9_^wM0Bw(WD|gG^S6=g9+aj*qme1Yt2M_jeow9-`;cMq`c7$o|+cxVi}~gptk;f)Kbz9&qHp&-!u_&DF#H zv#X#NN++Uid_k`Bv7bt@wPHq3tN@_sI$|%vZqz{{kwbQOp~XIxPNc9CMqLW9yOp9D z9mQ&Adt`()zaPE2k$RS&q^=F@`ktoS2P1E^h z^%0rRFx=NoVmy6h~CS*mBNFDO{Zab}BJH9gxqp|X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0>Mc{K~zYI#nww`oK+MD@ZXFH8Dh*rl8{W)MDameNsQVdIQVLJ2}00C zTx6&8fmsPIv>+l90&e0iZ8xrkthAy5#Sv4n1~+Lcsk#VQh!8PJTWDpN>td30I*)I@ zWGwx|;p4ma+;jf-{O`+iOmA{A5bmOVojlKdT|DtE3+^655^mCTlYx1 zBX}g5NF;`ahIXYoQEOMdjtri5s|ux9#6@Ilrm4P0b}%|RYJPs+%*>2rGU+s#$BR;3 z+I4DCtil4m!VG>X2~xmk_y_&9b2W*OW^r-R($bQZl@*0T0sLN+s_RP@j*xW|AC(O} zj}NvZ_n{R(;v`-~u6n*%MHP1~l}ZJKL?RK&`%3LNKNZ-BJieb5!YLtqB7|3k@K#m7 za}`8}hlj)5++4_JvlWT^`}@P>Qp;LfTSIemb6vj!{JF*DJren%?m4o9fq?;ogM)SbexU3>Q`iZe0;AH+r=!ILtMMcZ*^P)5fz!3mBHc+}*{+JdeeV=*(DD*5oGd;owutc_xs#YB^CZ`n`TIYs&N`ee~(ek literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json new file mode 100644 index 00000000..ba034aca --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ph@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ph.imageset/ph@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c7cbee3784642598daf0dfac8cdc9cab94b93d15 GIT binary patch literal 929 zcmV;S177@zP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x16D~yK~zYI#nxYJQ)L*(@$Y-uv$<~0LKua*Oq^_qF##svNH&5Rox03G zjM1ybJ7QE&FAyjeRfkg?~g&ig$F#!dfe=xGCLs-k!v2N?ywcXC? zIgb}Wu~rO>t^HlT?~^B=JbCiwReKMe``ve}zhbxVEF$D8ZQ9&f1qHjBs`G`0Oh(n_Gl64=nZYoh(vr~_(2S0>75KeV)T+6t01_!h0yLcuO$D_ZG0$b~IPXa}k+9WvT+n83?#V4Mp~3UF13axK01-0NP5_`nQ+n5dbJD0@6r zmpFBrz=k&&J9^@V09S>ed#<1gmw_Dzl@HE*0FuLDg3a3qeY6L$tSLeKH{_pjxKZxM z01z`t=##zlzr7VJ5}h)@wLvZ=dgLg94R0~t^~aP0G9VJ~%=ijS^ql4V#!ZZN9G*77 z4n#8YNSp}pZMqe=Y*Hdc=w|C?Oa5;Yi2k}f+)dA3$00000NkvXXu0mjf DSH-l7 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json new file mode 100644 index 00000000..23b6c2ff --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pk.imageset/pk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2a0b3801ba5bc3ed1ea5f500949cccc81a2981 GIT binary patch literal 552 zcmV+@0@wYCP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0o_SNK~zYI?bbg?TTv9p@$XGze3}?iB_xreywoUklB!EV#f}PfX^Iv9 zAeBO)Dt0t9YloH&LI#(XrueUeh^>>0e`x3up+h8#{}6|lLekKu*d~(BNi+DKNi8M6 z@t(uEA1-IOVl%RF)PAeu26?jhd6Ch;qkN@8=Y!#I+;WkWAh{_)a&sw2g{h)Y4t)@l z(S+~554Xd8br6Fv5S$3|E1e>86v?VpTdEo89K_@DP*YV?T*y$@Fx|I%2(G`&Iu}CF z+R#eiae$d8GsM++aUo;fV<<@l<-3w~ZZ0=tku1c2#5p-TrKz?_(_EvLW~a?bV{Id` zWbBWcdZx1UWeKTFVs2|r69P28h|O#Rz;3nUy6(!`qX(fGq9heEnG8Y*M(&R2y09RS zgqmP`FATusy=SzzTdoEI@N)ST08*L6%G5`^cf1H8vU)1Z&GfhTW4w0p71Xq>0IT6o zOs`He-ZPH1(#o5sZ+Y(Zv$?ZDLQPO-ucujV=Hcr;(&y>oK>&QSQ$&xW_#gOj+MLJ^ z8QCENu=aJ0-WR|gW!U_%O?Xx(mY)p zLp(Z@|NQ^|UyF^cEugKDb@dFk8;k`8uLMfa@qtg757k!I%iHs>P@eIla%tqgHTRYO v|9$b3v6N%^)`fQ#bj}KFU(k$(8QmBzf9L<)xqN0S&_)JNS3j3^P6|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json new file mode 100644 index 00000000..028be044 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pn.imageset/pn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f228eab571a843cc26d6b4e423c6a6dc7dd5de15 GIT binary patch literal 1616 zcmV-W2Cw;vP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1_en(K~zYIt(ALFROcDSf9ITC*kyNN7Z$mT8W1o@ykm@@iHR7jV54y| zF*S8^0aLBP+K$zxiBp@TQ%xL_Xh>?OI7VxzCZ!1!lhME!!y+cJ1!BB#5d*?$2Gx~=lWg)^j(b*m91343!p+X`&_?fBQIs>*me z^ZqkLyt$X2;xYitSsAo$e4Yhs-W}Hiuy9T+e_R#Mq*JBz6raGHoq@PGO%>adXUkoO zj`7XBOgamT2#vCGVAl#-%W`=l`=0+>^oM9!dOVf8GdN_rKv3QmM3a#uTL}~2d>J`* ziXuKzc(LR4^d~Xw*h<%t52&5-5cYkAghmE)@YQVEPUNzF)l39IxFdjtb7CofEJ;i0z&0LCo zUm@1W5Dx5G!S%A79|SZ4@Lup`%z1eTIvq*25@PneI0_K_&_162-9K>-xK(k)=yJ>4 z4p952&+*Kf***an81#(#ghw|W?U)i{3AwSLMiQBw9Kqsn32#+3-aZG0)L9r(XM!lA zDk@iVelsSl5pTTA;3uaTth+=&N)pDj`AC6AWXAws)pt{T@&X=@aua;RweAj~^sNtv z=11%NZ>!%o$iDv|&g%0380OqV=!SK7QijTFLqo#nnNP_9Rh7~mRk#hgG%EgzfHq9Q z(<K>j? zeM$mOW5DpbR-t67oAOu>BZ<-2w`_H1FGEJp{c1FEIG7t7+O{7D&I}PsbeJkWIL|jc$W~l;7=_&e{IB#hh(J3^Wyrs zOo*}qD!u2$0gj;&a%{s%*!>OPs3^;>YG%f88@Am;7$(Tm|^JzrJh5;&FhmUi8 z&)Z0WCiLr{;B9*#`G2tSX<;(or~k8hmdo$k=yG%u=Z+$G$zzzp6A9PP;rbUJVu-6I z>pLyE&uySdE+8Sgk(>;LH;zrGrCs!D#sxU?!6<-n^M+x7y|yt!XiNvyDL5@M-+VoR zntC&zoh&75-f6;A7t5dB#K|x6sZPAW+MRhUFX}|px#{c^Y3(!&XJqY)6#edv_YoEo zdJ{mvrX1dCGqHbf^|$~dnyrRoy+4Pt((MR>LZnHhPpKlro5cA~DwrIyfVk{x?zV))SVsXg<{$#M=drKJkNo`cJ8&!cY4r58Cb4o+ z4Gr4=(&*9y(a>~|-N4|L+k7#nVg@FEU6ukj=R1CEdCQdutG&EhJQ@VuC+7EtS z{v$=w=9i4%E6dhsH%xt`ETUAUYk+^#?XB!U;M0jBu^q^2>9=uihAok?Io=f$co zM^sfr0c!0MlH5W|^)yV@Yczh9hU_tnSnGWL)7x`&CJ8Y;bYC$uH_}bFQ=nr&V4}&( zK!X=WmT0e^ir1?f7^mk0Y$>-CI zjOg42E8kwV(0Fzk-!|Kb3G3tYip6LJEfX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0=G#-K~zYI#noF#R6!ia@$cD-u3My-rVm-B-4lIK(`X};dMYd`G!nv6 zl0r~I%cR7Dk}P!dB{72_3M+{)>p?8q$_lcgE1I#ACgP>M?7Hh-PY#x*$DxFQ* z79m5O>_M=1*p2Nxftw>ZqRQ^|sl8sFOX$9jp6lLzSZ^{=9*fF8h=rf=YF-`I*m#fYAeC zfl}TU&LuEaM{}q1LQ0!~w8mmG8r8Vl1}5XEkp2DSCWG7r1)+;21p7-71gOkW(%CEW zMr-55^#LpncEcc5Qm`_c+X3;M{Ct}2t#|)hGGc4YRycRZM864E2Mi8{1xjh_7CCj( z0niymGOzwwUYi{C_=Gcz`vu z+SyxZ;9IAitr0Ru(}v?^=^^)19#0>wXG?qaeCqWQ9=x`W z3y}zrxKYl9q(v<7ECPxqg|KQg(GDwIdu$nQ_ZmcQJh6Q;~f&jbM$vK~-V6pGa+`i!CWCaNA zc}M<-V?_UWIb(p|sc^U=-sYcVHWZMey^K_xzKhLSMnL3t3;Ua{aJ>F3^DKR{0vH3? z*!h_J_t~t_)z2zm7_vmK)un$?6Wj67C4iy)0@`2ZEhhq%#Q*>R07*qoM6N<$f?D=& ABLDyZ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json new file mode 100644 index 00000000..47c12871 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ps@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ps.imageset/ps@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1f98ed6235a7659d228d4c53da15c96b5b78833b GIT binary patch literal 386 zcmV-|0e$|7P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0XIoRK~zYI&DOC?!$1_r@o!3(4h}Az0(KB_h=e*i1s9>CGkgP!M_!B>@S+l8d?g;K2GBctIlsl|dgS3TVeC~wd{$GvXoz8ML9F7;Z zJw+>*702--!m=U(V(T(ZAv{lr^;(pe0t+n&U@(Ag7kq!iDrH8hRXy+#ZAYzxC?pK21e{G#NXuRRfaz0Pwu!C<{1cdH?_b07*qoM6N<$f&>$tT>t<8 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json new file mode 100644 index 00000000..f8a6215d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "pt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/pt.imageset/pt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7f7ce200c8800bb79ab9aec65efa923e8735c421 GIT binary patch literal 641 zcmV-{0)G98P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0yarRK~zYI?bT06Q*i*m@$cK-o5MewZ`E>$C3Ci1u|>luLCgMG1mz*R zbchZ?VAP>MUV<(`hi)Dshz?-~EA3Da5g~zvHVmVKm`l@{L(;a{+cWpib?6WbV)M;) z+V}JhzxRG0e!s`>Cvc7@2%KaUIes$e?_tks-pNw0ZVf+{S4Bu>MM!3vAd((ots!Er z12{SkW7jC{T}SmxkQ~|(IYFWdbiV^N9Y@`i0=u1=v<1QL;8&%As4b3B0-XY} zYVDA$TT^R>ksvG?<5=rs9KZ4kxuS&0K$P~Bgm>FAa{-9i;rj`wxuXq|bwvVE_!@@f zf{B$rk=|PeX?9o9dDg?u#buJOH&W(;l5b#rt__hBWJ&?I6~-DCi8PIqdTt{A+L|w2oTkd0MO&* z6aub)4G5|*tw37?bT3RX)KZJ<%&tVJYQ27Gei+fFA`gIkJ}<{;P6t~57nlmc<$Yih z{pj8P6(J6y0CEo)UgU)UR&m5nhM?o=pXbI$eDd9+G5_iRrs>iPDX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0k}y-K~zYI?bbhN6JZ?2@$Vfmf14QE(j*84EyfH=Nf)IQbc^61Nd*_l z?kG~E5u62aw-ln_W_2h+hqmA#8PcJkqBj^cv{gtnrP$sjjmf=kwg$Z19T%FR&v?AQ z=RWUo+OZ%6IC9ay+y?R?Z0az z1gW8yL_M24D9zInrXTd*bbUwejNUgy9M1Sak(-e@%ZRR!MBp70p@OBtbmS>MS#=h2 z@#GuJg+5thJXmxV5_4}@E(C~qtj`%jBuTdgk!{QwLVh-*wje)j%o#$~cc&~DwuFoK zyO*4XO!B3kuvEBO%dpcLbQU6n%;WMywDy3hvaQBx^55@TMs$S$lpAq!r9749DZ_Oi z)d^-x&rsVzTM$#<;?LT7ZY!_3I{bpm;U&iW3NGn4b={A$mt0A002ovPDHLk FV1ihW>9YU; literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json new file mode 100644 index 00000000..f3d589da --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "py@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png b/Passepartout/Mac/Flags.xcassets/flags/py.imageset/py@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..84496f981d82eef0e927228ec29c9c21a2fcb5f4 GIT binary patch literal 396 zcmV;70dxL|P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0YOPbK~zYI?Ub=f!%!54zuTrH>R^RZBq_QGg5si6eGdBwzK6~ZK8Gzh zxVSjESa%&YF9@utc9%{(Pa)}p6Gqz$xw+AJdU`+Wc=lL_T=nR>mBQcB0AZRm6Xc%DbE z*TY({07yO(vMi&~XlUhW%}5kQ3{d5euR54h6U(x+L=cg-XyCf8h=|1F zk%UP!^QOU>_ORNvjqm$kTjI+I$8mJyFuHfaORZ{Z-jSu5Dt6zrQi5pwY%~wAR)MCT q$ZsJ}|K`LOB6$jtJcYX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0s2WqK~zYI&6mw@5>XUK4_HV6zcy}^=)zS^R2I7E!ezIbu1)-h>fSW9 zJCm9=sm6__B1xGFro6EUp`xjQ&QQkIrbQ^j$1s2kQf1Td+C0Ite#t$_z4teFJcYzY zAv_rga{?W=&Hk6~m}`PuG>IiLbUU4so}UrVl4p=eKdoAWt+%TrX6C8v>?#!*8(7?~ zlYa4r+=m2~$k29L3I+Z$P{bDsaQDe0uH3qbq3M`wg1z*&;fnx_1;zO^}a$!v1-nQe(+0`_!r0)DB8i zihDH6M+zl+NVn$e>nNpMLAk&&r^=B^VV8U?N$T0c@N)#9Y+4waz|?e%c#3AFs!*cG zz!`C>H7tD-OJpdnr~iorNX&@;e2|IhDJG_;pxY(;>OCK4o{uI+w%)}tR#TXoz}`Pp zDj+T53kA4#|2A%;N!w{*YJ$cn))(N?^{d=@{E!vF3ct3CN{ja+ zog>F9oQozg<0;&xqf$dY;(fsY{!ozd%NOup3@Mc8A>EqKbBi?php%tPZSzClWIMi2 zc6mkduu4X}TW?^A%%2NQ^~Qi?Yld;Np6!Z%IzRl@^#9iwn$AvggO1x)DAD6Lx{owC TOmeXJ00000NkvXXu0mjf11}lq literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json new file mode 100644 index 00000000..a4fddb25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "re@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png b/Passepartout/Mac/Flags.xcassets/flags/re.imageset/re@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62d74b4234bbd0e63fcc2d2c282acfe986a5e93d GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json new file mode 100644 index 00000000..1186ea72 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ro@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ro.imageset/ro@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..25ea7aaadb256f5d7605c40ba5eae60cecfb277f GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxl001; zLp(Z@Qw-+pp4IrUo`YF1A>aADqWWFwvLh>MjXOU-c;5Tw+mRKi2?-I0U6we_Y7T5) fKs0uIEWj}HDEFHQ5;yaKwlR3R`njxgN@xNAMi)c1 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json new file mode 100644 index 00000000..0b62367b --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "rs@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png b/Passepartout/Mac/Flags.xcassets/flags/rs.imageset/rs@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5ff02e46bef21213f336ff95f569ed3faeb0f8b9 GIT binary patch literal 1221 zcmV;$1UmbPP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1bRtCK~zYI?UqYuTvZsyf9KwF@0~|xCYdIacha;{u|B%6FPa8w+G2gt zf`X+YmAViSapyu^DdNIK)ukYaxUw5Xp&$iq5-7OvRceWCtVz>0X(lt7*PWUBIxdn_ zZ6`AWDX#o)E}ZXw&-eSzcewWxpB_4DZ^_JtSwp|LWj-lpFc9pqqI_M+)2SI)0uDzK zJZ!A_YSWrb4%k{FlTrc~MHR)5u8jclfsaHGsC6^kQbUjc1xlb0L|QZ~U4U4DaC1QfR92ca90pUtSFC$V)a4pYf1X1>q-xWrxgB5z)=Cd z&?sm&nhL-WxYa5xhC)h#3>@Ovv}qD_g(a3t&;UaSBm#Y)IUy zrIr}<@?1AF>=T2iV!)MfmSn*t)7Q_0ALaXeB+HpV&PKF;Dxys zrZ4|a>c!*usdlEu#*xy%7(GbW6OXfS?HWJNTp_XWUBjx={m-KAxXS+k@x7`DGz+Ck zKu2jhN=O3DMEO2WrOHCFjDP75TB0%Zc#Q0Yi)2TJ@%(^tsfZKqMFdq)KAQ3ofd}}A zzz5}{WEfNcqDKE$L0mg0wZMVE`N#6|hv>`?1)e_sJjG0!SSp3+Orb?0_(Ox_mX2IIuHP|b!dC>>dbVj(hLG&pfm#|Oafi<%FaRhI@(DWij*og z%5gBF5yGC2?s%j+x_J4(5nele0Zq9OxQM_-Q_D{gxF{K>nAlbq0zgV56e!IASl-Nc z0UJD+{L{g6UFNS|WrMF^F@xjzxamdmb2o@@8e;1D45qVi=gyi$X%bJ5HiQ6>`wl)i zyLmpFtQ8ztoW#iH>6RtfyOaEl1yr#>WbYmfe+hklfgNq#OdTF>D%n~Z=xoghrPL|l znOcVQ_yp5mzK89l(a*=&{P|}j+uQl+=rPJ&vqYmU^bEgB&ymCH0s&6d9RoJ(-bKhX z>5K<-9l9S}k8&KoY;(ww4L2lPyD}cqVbQa1U00000NkvXXu0mjfAdN_j literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json new file mode 100644 index 00000000..4c9350a2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ru@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ru.imageset/ru@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a43e6c13125da4b134b42e2c75eb32f52b3ba7e7 GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxnmk<` zLp(Z@|NQ^|KZ}j6O`xrjb@fcP8;k`8uLMe9_&|`=&po%A#pBtp2y#ub$s60O-gcM-KOU7_rF^iOHV9S kZ`;$XmgOef#0SF+GyX^y_nX|E1au99r>mdKI;Vst0QRI#4*&oF literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json new file mode 100644 index 00000000..44ba894c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "rw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/rw.imageset/rw@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0b1dae1202b78f785d7795ab0a1cd1812372abdf GIT binary patch literal 439 zcmV;o0Z9IdP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0c=S`K~zYI?bS<50$~)!@&C-c<5)5oY8Qw=$S?}pMVkn6)2HgYwCfv0 z(59eG5JVdzE4mR~wQNeunfHC$M3`M@Gft4t`dR!q=fE*$mKJLpjoB_D%uH;(Zbk`c zPFo-*3PFI0`nDs&Mp#H((_=&&b0zzD)CoN0BC*;BvGM5>w@ip4S^Jo(N^&jx+4b|3 zWrm;$6DlNbyf7yAn0B@(bgiMZ!OHVIzP9m{OQ5^oyP@8QX-LW{MM{*(+a<y*M9HgeZsi+i}a)2kDpemCe4mETLK%fP8vX>n>`L-JC%UX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0?kQ8K~zYI?bY8)Q&9lG@$cO)-F7ePoI1DpV`!A9{g@?YWd>!@4mUEVbB@)xj4#)skdqO zN&9QI71XoW)k34AnXLu&NTwW4RGdLgC^R__pc8b2V~a$SDs@GT~kODv-|clvIUlak#88{OAgSPGGC zurLuGBdI01P<4d@a}f^)ZsW9+FuydH_C(S`7Gv|goqUDeTu5J_hiPSsiSQV$mFIc> z;|bqGL+mKp#mK@iYC`2$c`F^?9o1+(kSYLqj7H z53g*z+%n9lGf`vna<1|+rMVRxepdfyAxb>LJO7(C&HW_5TkEnb{Wo_c14%6dN$nTE Wdk#6^-2+7c0000dUSID literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json new file mode 100644 index 00000000..d1888239 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sb@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sb.imageset/sb@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..473108503fc1bcb053e75d33bd07bba5930e41c3 GIT binary patch literal 859 zcmV-h1ElX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0}x3>K~zYIwboBe(@+4%@o&4XR4_0=VZ#2vA|ZqW(ThjoJm?7%jb?f= zQIP;p*?y zzP{If-g|wo72v~TNFM{JtdxjGH8zSMKt;vo^|lsaP+WZ)43^T+plsM=-@a|Mwia86 z$V3G2`Ru%W>7lKyn4uvLJv}>-WnoQ4MG@%jEhiLm6AYH{{JEQ|D!XM6L7y7GzksJt zUChm;@OUOjr%lu%#9}q%=ZhRVG{wlsFRK_UQ&UhNP+L36nKLoG-j$vnKVE1Y`+PEi zK$N<=Ns5YW79lc`^n+072LQ2H<|S-w%%{9uqQBpXC_+50F+BW}iHRftk;o5AA>!XI zgu@H8v^Xd&wb9;QOgNmh^ug;Rtv)F$lbD&wjL7V4ifB}$xAz+^mz{WAGp(0P?2^Wb zgU>kJIP6^m2?k3T7?>j*UI3t@V+K{#a5`72?b)Ny)U=(hu0+m&p7z`Gt}<1bo#(p* zP*r88udf`xzkooXkb!|Yy1NsoYNpq!s*#r`(Al|@lP3#tIBYaDC|tM@XKHFOYk+KD zGd7cV>{5-Hs7j~g!Eq9Pjy4t&Xa`RXIk-FheK zamHl5d{l*-;}H79pfTnShmE?rN%rnl@Otfh{`_Z8eLk7yW|eSwf%^KqEdcH&Jx>$kk{Mt*gVG;G767ia+|#Nnq7q;S7>U8H_oe_NmOxAZ zQnmm~AO_&v{Zw^j#P%Q-_Ux9C@yi- zKSWPkA2psY=z!O8wCnGX{wKhIv>bU{(Q)b_zRHMEI2I#$@eT5D#F`B+E6Dl4BSlBN ljg!3g4mtD*d6RaQ=Qm5PPa3-H$xQ$N002ovPDHLkV1m$wjcxz{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json new file mode 100644 index 00000000..eaf45d61 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sc.imageset/sc@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02f57a8cbd0c98a229bbb20415b7265e82f3e3fd GIT binary patch literal 880 zcmV-$1CRWPP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x10_jBK~zYIwU%2*6k!y{f3v&d1=5FB1T*nP!z@Ay%nN29U5F*pbW37I zh z`5D*%-268H!owjg&Fm8-G|)|P*(DGZk}b%i`A(;KSQxBc4LLcmd^t2U#QFred9Z}Q zc+b>CIj{xL`q2#zhRjUaJUbggLMEgYL2?$fuy{xJ#6=fS2vle=4-ABrD`DL_uvn&; z`vnOyd8j;72?664-vHUbOBLouBP1uwC(p|Rvso4M6p*XCjuEnOT;Hz&`M`jmT?__D zNs-O1R)~mDW$qJXS)9bO{gV9P0rmmK$YVM=1ObwgWaHdih>TS4>UQJmY^T@WM#mSC zuD6ffqaY^32p3M3Loo0OSP$G)*d!rgtnIO}{tZ1IemU&)y_e{AinI<&Tpw=XhVd1{ z!tYU8#y5gSL8>-a5SH$O2Y?kA|N4lDkx!nV5ApGep1(i#^0iCE?v!Zj7is({Q6oI% zvtiOl$H$zS01_kZSPwVLqge?20%p&KtStHTsi~s{-hqCGIwc$qk@kLxJ3m^uBD|p2 zFf?&zqyJ_pf?O>+jU{9WSW$P-$PlYX-_8u|+1 zTzYbAO6=f#XVfD4qG!_R61nS@XbkAVtMpd=50UYj4}Sn0pz{d!c#kUp0000 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json new file mode 100644 index 00000000..dc61053c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sd@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sd.imageset/sd@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..55f0018da2533bf41fa54cbd9df27edc902d6ce6 GIT binary patch literal 443 zcmV;s0Yv_ZP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0dPq~K~zYI#nU}YLQx#Y@vnA6?@&Z#6xP%OLbwIyQiIODg1ke4zJaEC z3l6RsxLh2xsa`?UP(xEfT<~G(N$?^Ph)L>ga#8bM^gjIHZ2!agaDL}-D)IW_N7Hb0 z<=y2K=0fL?KETnq0a~+=I0oqinjQxs{mA>UcL4>z!w>*v6`ZJQ2m;PjH4@T~omGv6 zfPGcD!dIKcN3FbNWca8XtjV2NWnT04OjU^Dv*20V@bXzUG=Do&@P(E#zI-H4a4~2m zL2al%Mu(%z(OPmhSrO}EuT(FYhEP?t z>f($yc32-f`3vNLd(+My%(Z?sRp1i%unYm{y^$v%3$(38{136d3IhvKC002ovPDHLkV1l2j!uJ3G literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json new file mode 100644 index 00000000..d9528de1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "se@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png b/Passepartout/Mac/Flags.xcassets/flags/se.imageset/se@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d2cc99a53f6115a19c24f5412ca2e82394e9ec11 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxCVIL! zhIn))r<{n|H>E0bb(9^ p2b!1}cvSTNfBty_l4yo8FbMj{Omlk2_7mth22WQ%mvv4FO#luxP2d0k literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json new file mode 100644 index 00000000..067ab513 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sg.imageset/sg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..baf21ab98e2820e4e834ea59a744bf7a9181db6d GIT binary patch literal 490 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0iQ`kK~zYI?bXjp0zn+W@$b&Ang0pfr07=Hu7$Tf)F~kftA~iZnm&O& zK*zv~QWT;OAb1XZ0|h~_Qb;P3bz65k6|~@S^|Ig7Ff%Y8=JJ!CHLa^R8k;PzWligf zS%)GPLt0vz8|FVmmWgGvY<9b>7K`|Hb^wq9fjL4X3AI#WrBGn}_(=cw7^B(5pG>k^ zEFvP2`9Ok4M}*GLF*_ZG*(~zL1_0B3pK+~*_4$dszV1FGban>7xLU=wEaEpeL@q8c z+ikweWkfiPdUwaNrnv%9eiw2g0l@V26-<+1E{Cn_e;2LMh__6J>0sar{;P4QD$mJ!$lM`1E z{~(j6Cx-bvA{u4w{vOHaqn}DKu2jG@8JwQ-RVuj;0eHW@=H=i3>*E8pQo+Bwi#?eD zU>gRuVYmiSoEv(*j$W_3_TWrNFqP{0_x2V#Yh+dJNw#f20O>_SfQOkwZ{B$jXCB0v g2XW>>oOuvuKSj@m_Lkpv8~^|S07*qoM6N<$g25`@W&i*H literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json new file mode 100644 index 00000000..d532530d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sh@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sh.imageset/sh@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02a7482873124baef120ec63dc0ea7a4c20b9c75 GIT binary patch literal 1433 zcmV;K1!nq*P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1x`ssK~zYIwU&EORCN@`KX)H2k6pk;S8!l4(D0QaJ}S);4HX}gIaVs> zBW-d<%dycWmDFs~)XB1Gbez-zQ%5r$ZBUcQCq57b6;3p??P&IPyN#jn8j-(j=W3@YYHJ;>5YYg|vJEE+MjmidJZJz^=rq`%F(S5(EybvAkeMp8unCz>~tZPSEBIqMcpZ=#bBPhLhFT`89bpl{H5kv-VFc^Xt#V_v=%w^GF}U4N#YtEn?leW6Yl)%NOfcBV4=28>=@mVfkw;PIr-V^ajI*`7&dM zmFVaiqM}S>WmR%BKbq;Y(ow5Hk~)%?*N>c>V2&L#kd$NxK(TGxyU}lU6(}4#jq2(; zmMDiZ`r|(^n`@p(pCEuF$!yw`Mz3D0_`O0!_ru8qdU^Op$e>F{A7W#j%$=Lez=0{~ zbj3tQy3h%c>`WTk@aL*(`t(U-%9LG9oLJhFk<_gzmRq*lp*dl%vw6++CsMri*IfDy z9)s;c0L8`CjoW&!0m6VtpY+jlupsIa@Wahts zJ#Y*v<4ee*6OCG+LqrjhJB;fNJ4#XHzAF^FC}1tj0Ja0r`pe-d5X;ihoEnLkmWX!W zD3INF2{LK{)Ph8v(}ms9P=}(!+345i8F7jb=6pzH?w8mN-grbA!B34w*5LAZ@b?lB zC5eZ4;c_%JMw@4()S|{@1yqpb=fGBc0MTBH&1yj<*Hcw(#Zpnqkc+!{U}>7lZC@jq zb&MS!fav=G-x5f-eu&+%0okWNF4@iH9bX}r-@x5>I7RtQ3s~D9jZ-4W@glvvj^nTM zJFPa?fao{Z<00000NkvXXu0mjf$>g}M literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json new file mode 100644 index 00000000..2bb2b08a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "si@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png b/Passepartout/Mac/Flags.xcassets/flags/si.imageset/si@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cec61dc46b02cb6bc35c80a899b72f737f83edf2 GIT binary patch literal 521 zcmV+k0`~ohP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0lrB@K~zYI?bSO-TTvXx@$Y?TuXv5QMnwl3k`mFhMGzm@!J(jIH;aRU zt75k<9XfWAZVn=p4qa+9)Gj6Bpy&{h))2P}hN#4Mi?1Z!XmW3-22B;0T$3Tc>74(8 z!-sPY|09^D=>z)6Z+v2&0htsGM80joNE<}gwn)Ykl$4dx(DV>VmhKN?#LgHV9A|p3 z60dukpBpYZ-CFp*mAK=@*MpV@97Xok~+L$=DQTk<@3&Cx9559Bz3&FZ>dNl>}*Axsy zZmWpvcJG6{B0QCGT^`+;QuH5zyh4|gW!U_%O^81FzS1{ zIEHw1CfBTAyL(n+qhbpqf5O(y$q(k4wH`FhR60EGvAF~Yq?x)JFZnUcpvJ`T@bak^ z2Tp95)maq0g4s>Bi4TU^dYvO~6cFGN5>i#=VA2^WE z;jg%Qt}JtRtK~Ar{q@E*tJf{Op~%z2Q_k)yC0WX0B>}@Ge2fe|Azn6noljZ-1Czni L)z4*}Q$iB}qS~GO literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json new file mode 100644 index 00000000..9f534bd9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sk@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sk.imageset/sk@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5423c94bad21d7218ca86e4ddec2401d8bc5d9b7 GIT binary patch literal 682 zcmV;b0#*HqP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0$)i)K~zYI?bb_3R8btq@$b3!GR}ZHPC15RVpBedh$4Edq85QkCW*9( zRzX{pqE)LXA`wCqi)>Lr8;zo}mR9O$5w$SL9D8YEy2u&S<~lR?+}mRCq9T*cD7o;r zI_LjCi_bZS`=Hk!2wVR-{+_|G!WzjsWO3FZi=!oK#=8APZnWBS;c}sD^&y9bAQH9f z&T}oL#Qgk~Sa+{IS8}|#Z?_OC-Gvp_?Yg7-1f&XSZ|j?G>G|nes@dcW#|Ns4 z>p~sok5R0!j-#p)B`+7f{yG4`$r;YqcO{MRj(wlj`uj(sufK^U7c?D=*<*E^4>S!- ziL#{-B`??R$w-7p{^6t{2d0Ok39m+x5(%g!Md%HUSii$KD$0r6y^qMuKrJao4hB%A znKWW9i6N$e1RPbBILeM-O--R>ZzTO@Bf{e$()JKJ7(g)%AZ_&^Q7sJt=vN!iFJA+| z-S>j2@~Zd(RRv&HbEbrVzr07rvo^&CQpRCI<^8}ohENvNN7J)c7xF~p6U)e?HD^C> z(hE4V^(2RyKT=y*NmquCJKnum-fSMscv6NWyqf0D5ps{8<`L6 z2<8{HTTq>7p;B>-D`qjb##|Ue!C^^ieKG2SZ!tPwri1_xLbNaIqh~(t;Nq7KI?J4# zc8BObnnumLwiQ9xnB|we)xBvhE literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json new file mode 100644 index 00000000..93bbb9d1 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sl.imageset/sl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d4351924bdea1b8ff4575b636fb9b90444ce701b GIT binary patch literal 200 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?XxYCT;X zLp(a)UfIam;2_{~F>>dH0E5lk8wG#wa$3hHyp>T|+40~91EKRF*O{&*)Uoojxfv)q zTsUOpc*2LVpW~w7B4wB7HBYBk96Kj8ad*wcDM1W9{Jb_>@>^bTT->?O{@S7wY~Dxq v#m~;3wUQ+$my^-pf0~q22~f6Dy@*+Fr{pfdjq##DhcI}$`njxgN@xNAEb~Zf literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json new file mode 100644 index 00000000..8f90da18 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sm.imageset/sm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c6ee62062fac41efdb614f68822a1ab4fe5d48 GIT binary patch literal 874 zcmV-w1C{)VP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x10P95K~zYI?UqewTvZgufA`%t?^Zf*^h%v;3^LrcPovm;N<~dMAgf z)hdPT1%#0FYIQa;)7b6+jvr;m_}>2yB%jX{%`9P^zDOamj+#yr-tj7p*T=DK8%@(X z_PnFgSRsr2ud~?0-_Sks6WR;Q)I*<8E7hsERUFUh*t4UIr1NQ}u1@jg`7b!}yu-$z zNlP0+Dh}#HS;}2=9KANr-oEEJG`gRN*7x6l9Q*nhbBi-PyG>!mOVAoV#Z9vp-*?y* zuQ8Z=msjKg&MkkBlnQT;9SrOpxHQw3r%9P9cIgS;88K2r9sp%YbDCf7D5@IS*v1t zeN4h< zgdQdw*@7&kNi@!J+SwOQxm85BSmnr3b=FI#h+(HFU)R1NuO=FNbV}fLUg;fKh zeZSFC;vIpAZBxazgHg;bu~qdLF(e0vb*5KJyb%vk%=}I{mqRE($iR({k=H^z7VY7~ z>n&Wn#Z9#zOZn%YRsY4y837Q!hxA+=8QNSMRu)8K zf+PQ$z!h&4fU>vcZ}CAP{?z?57~L&B0J&X%0228>t}z8gSpWb407*qoM6N<$g1JMh AVgLXD literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json new file mode 100644 index 00000000..1dba2f1a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sn.imageset/sn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7d9c580d34fed4f46732c5618de920f6cff63446 GIT binary patch literal 419 zcmV;U0bKrxP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0a!^yK~zYI?bE+Y0&y6}@%J5e_zR_>P$C>kh>(VcrpP6SXb}opTOuc+ zrLBL!siCPkY_KKzMT=3R5Cnpi4UuJ#VS{9PVqQa(VaxS3HR3+o9S;vLc)lOWy5x;X zk~E8s?1gSm{NB=pp4p2SNS=LNEZS6c{ zCu!&K+}1S2)a-)oq@AKF!%VKdki?Cdjf4|`%B#fXg95-p)P17O)l$bQO(Nrp)9k?8zA4s(rzlz4lDTXU6Dh=((b^r-+0yE3dE zb+;d~GL^?9YoFhPJryEB@d^u{<}2bOR^|J@mP39!2Ba|tq%nU6@&*WmSfYD|-zWe8 N002ovPDHLkV1mfpz&QW_ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json new file mode 100644 index 00000000..1a597bb4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "so@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png b/Passepartout/Mac/Flags.xcassets/flags/so.imageset/so@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c66ac7254fa1ff8d58de99a432c91e56b91b44fc GIT binary patch literal 407 zcmV;I0cie-P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Zd6mK~zYI?bFXI1YsP<@%J-!vx{O|*(4V2VG9R8j#4(<9OdSqoRo{) zIr{^YtAnDPwz#bW7ZRy0$;rj6*o4)hJPy+~)6CM$>@w1PE;G&dnWtCtd`66J$}K6G z!ovu`w&Eqg7$0Je4>9NeKw|Zvh(7?COu#_QV~7A!9Wc@5F{G~rS{q=b9qNLWK>~Ic zM#GSdLeM}T@6@ifH89f)7x(&1N;p>G<-N*~d=VlcnD2*BnYX5s`hBhdt4H<`;NWPa zg!C26?!syA>vj9rFt-OMs(pkbNGUhZu$Y1DoprWz2`h*2^yYL|mt_qHAQ7=XAFSXv zb_E%3(+a8X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0cuG^K~zYI?Ug@E!%!5(&ubplCTYP06bF%ZaB}G)xI_deaTGs*AVN2x zi<2Kg5F8vG9o(D*9lErj7A=B*inWU1Qj1ob*rd&MXsOUGuZ3jj86WQ+e(&6Sd2DWH z;fN8|;H&635MTgXqZtmy45wckcuqt~w4g8900722tpPBdvOvxD zoyu7l=99OCJcHCr5=QPNB+?eRO5O9x)dpH7@VqN~h7bY)fNCZTv&b=f@ZE)J{xIBb zM)CVD)@|WoC6|FK1adn@3V~cEY9~Idx?#ilWO&$CaFB0^JP$lM8xx6xO&cu_xg4ADbtl)flsl%--BTV^=LAk&r fG6d;WU_kx=OHb_}uQL+y00000NkvXXu0mjf5D34g literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json new file mode 100644 index 00000000..37d1b6aa --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ss@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ss.imageset/ss@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b6f9e0b8f5e8c175749e33c35c5f911f3a2a3800 GIT binary patch literal 812 zcmV+{1JnG8P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0^vzSK~zYI#npRAQ&AiT@b7)iUGJvO*KF!GMJ3owO9LkwR@8zrXg$=R ze0)j*Q6XqL?^2e-W%lv0mSh4kFe(MBjtbqLR_ z03nME9RvVC5MVS#P!`@sSc(N8nGiud9-4zZ;{=rX^`PT&LkF2}_VT1(ZS? zI*2E9OcoURbznE20zq@@0-@ELl4otMW%MK{$aMP=t~U!hS+6xEtb2rnB&`KPrBV&k zhNSq&&VFBsoZ;c*eHW`B(R9BnGfl4AnpR_0!lae08bUC%lcolKL;%S?jTed=ar5~h z{Bf~<2ltE#u-vtyaH<>Ue>Fnmnp`o2Eif4Zu94KZaa=FCheVYPXLhw<-^5|v^-GT5B4Hwr((zX~IogJBw=-x&KnMT~OsH|A`QNU&(_s!+U@dkH01(Azo5wo) zUFwAma%K)rKJXb~NT5->Hv)OO)&Cd?hHj$=dDk=mA4nhs%YxstgBd(vW=8C!OKQP# zj^)K;bIp7sl%@4Uq+OS^WN%W0Tk{b@>PtxU>Obxs0%#1lM!X|N|Adg<29cXsQ-F6C zg-EOoe0n>?*uHfGEDDhrC*0b%5R%^mq_FM?KM)CG!dJ|twF5H8h5&pZVw4p^Mk_?c q_=W=JA(Cvy!5bUkj_(Z#z>~kXqWQN?$Vm?X0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0zyedK~zYI#nek^6Hyd^;eQ^n$t0nQP^*nCX=`f(qCyvL-4wd08@tj? zQHl$3p|(KfY+VzALpQX2--3M#ScjyyoJd6=&Q`2#5eJp9Rduh<|R(#)!Fz znHVvDz$}aoVird5b+pBlmv)EIq_k-X+u2VD4z;2Pf5Q4vwn%BIP=PvOLp|okeSRFt zSvgEdwNx3lCO4J>3c>zX)L20;00Tp%UwHWzM54xXB_ZWvuH1pKVDabNxDPiU7|+S& zKyop;ZF=Z~3&W5|!t^)j?t=|Au(KUb?9Z$VOhW%9NTlG^7zDq+ykiISbiuQCnfyZ#8rFliXJt)GJ)G4a(rNFqoQ9N!0WUI*JfuzfR#LgqTK8&*5DHDyB-&jRjq6NrlT?|Jban(JZa zF&x3#HQ^tb zHYir(ny1V5sgj$u7y`hxPMhZ=0M=HQu91_fs9Fjjq_#NHnJ-MPk|0(59QmJ!sM4|= zh$`Q=f$oSOZA#-kC=m}gLbzgv-yys;+^nNbX}pIM#BDz-Ey#urVg^D7F$X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0dPq~K~zYI?bORk0#O`*@$WceiA9=*SSc+cDF}%u2)e9V6txL@gL;it zy+P}!RjV%GHi{sj7H-lmk_ZZ2unR?6-g0JI6a=&L5Y=M7)!CdsKW5H3!Zo$Ci6Q3s z)5NCjZvo#~5OWs9oCPtbE-&_nf#>* zy-K4q2--6=1VC}uJt~@b^vL}hqedy8By-=&-GfH4^g<@*pjLVM1WF_asicWS6RdBf z2q*;{g=^L}(nJoUP&)lRNKG@?jomOZ6eIbv$I)GuzEF~b<18p%DTvewvk8Gpo{RSu zjxsIO%GY?E%`^!OM57c$>WkRyZssQY$lvM=x+e&`MtQz@V|Jz&Y<4M#+?})gnI4{? z-G9#Z{s}r&7N*AN?(714htx>1vXzPlea^7dW;6_xueFXLdG@bz#kjh(dX~ZvQjniZ lr2fqlZ$Zpi5OWs9+y`OmaY~PJqa*+T002ovPDHLkV1gGG#oYh^ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json new file mode 100644 index 00000000..66179e25 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sx@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sx.imageset/sx@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..be9c4a5b833ab0ee2b0600b9c2cc523c5f69dc8d GIT binary patch literal 774 zcmV+h1Nr=kP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0=r2>K~zYI#g$7)R8bsU0z_BUjv%r;i=wpP_kWCeb|TZV*8SXG0jE#sd7>Z?xWEgQO2kGT~}|F1$|yqggH95fXv^hVO~%$ zdR7r76*(XvsR0bKmYk=LAU7BM{z=!hJ4%EHV5esDO3lco!8(AbyH2G&4tr)HsX7gL zZ+gfvn?svIs(ii|t-Zd-&nqHDvgM5=n@kiQe8@Q^ox-dPiUUskicI{f7X)GR)`+)i z?M6I63$A4ssVg2#ZUD-6uTip}js{ zn+UL?l;DxHqkmDWUtp&n7GoUFLgr3?(&_M(V!t4Ojr#7KP%FCjMMZda`};<`75~e& z8;O>Re}Y6)MR?ZLL|sLAG?UX#TXpT*na?AOQB@J1KYv_6xFl)){r~^~07*qoM6N<$ Ef-d}G+5i9m literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json new file mode 100644 index 00000000..5322c28c --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sy@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sy.imageset/sy@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2493d8db342ca722a85144775f967f32aeb172 GIT binary patch literal 379 zcmV->0fhdEP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0We8KK~zYI?Uuc20zni;kI90}8iPu*77B`3Xsw73l6Mgc8y`S?fo(0^ zw-CV?qD9h4u<|EjWndSPgqteOCL;?e)?yFbYQD=o++ko4a0Dde8eVZBL?V775kHZL z9|POo;JS~YTA1c0CL#{-5UL0`fv#roHu%?+ApM5!KoCaT5i55^ch<#H7WqV;N~#iQ zxFC$*$85bVo#zggvdATJR8!SI^V*HXh@q|(?WZ=2!-D>6pRCFTlKAO24U^Wi#qwiG z@1=LPU%L^2hSi{OQ=oiXrfD@v$J2pD0BUzNipe6SWQqEHolHEV4~vK+8jhbwneXQ! zA~M}gbulfcuanI7GZ7J)>?Y@;!;5(}hHcwx&+{f>S}3K~01hA_SM)LZMI_=U67h2} ZBHw1ZD2v8UZ$|(C002ovPDHLkV1jN7p-2D# literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json new file mode 100644 index 00000000..1b13c37f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "sz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/sz.imageset/sz@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c46582ac6bf54d466f1242782c7c054cd7b050dd GIT binary patch literal 1006 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1EWbqK~zYI?Ur3kn^hRcf9GvW_r5Kx&43A!Hb9YP12RZRw=u~Q;vK|A zAciZWVHXAiX7Ng6CdQb|dEt$LaO2cOKx3i?7e&E^h|usE!k7@kpg@_>(hl0Ue2mr$ zW>Y>ikQnR5{&(kj&-1*$^MCT398vnxk6#j@ns`d^l@wQi7(D^mFYSwtuPr9UA6E#! zYO-iA*!t58tz&To8JR0c*FJ3ZCH1-FxPok2d`a4E*OqS0sX10+P*E7p&1H0BgEME( z^2XJxgqD_A?eAx~qXQNej#W=)OQ$_fLRgZxbM749`HdLERu&e2j@ z&BjLVHa9bW;|4-ik6io6Q=`f>T3E)0eQOJVSm?8K2zxlu#%X-KSR+imqLw z`1Wl?TH3)vHXBlYK9POlLmi0-FqCW~J?@xCm(2T<1|nNqF)ZO zy1F`QYikigAcVkZG=g5wg&)3Q?A;f@GfNl=)mnr(^%BYnGqYYVI=B1pK{V-MI^E88o|&b2SU3Ai&o(SYH9kNqo96;{$V#r8RMQ7RRV8|I%zRxYk^Hc#5 z1m{O?VP9JWz-uz`o+L5ja_w;>D=Q0tmX;PWGc(D~&OX$U<;h9`xkdOetMj*i5rY7cZ-b9KS>sT4X z+dMb@)7}HcI&xI0io&Sf&dA0FZoeOd;Q5jg%FX88n{{#VIOUKX237p>a)w{;@|-+Y z=D(~>OY%eQ$r|%op>;m4AR}|;HErMYdG|fHJtLkVe%0jGwmU0bL^%8=`mZE#{coO% cPeAtTPfgKMpR7@8(EtDd07*qoM6N<$g8qQsumAu6 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json new file mode 100644 index 00000000..5d40e955 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tc@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tc.imageset/tc@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..68df16ca80d17cd9ed8cab6d0d00d1ec290dc409 GIT binary patch literal 1274 zcmVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1g}X%K~zYIy_S1Sm1P{qKks?p_gpw!JWvLKiloKR)J+6LHZ7T3)3i0= z*d}?IX__@0q-o2fQqjCIYqnKR|H#Ub7ebq9>dX|`h!9bb8VVh`9OMY+aIWt;Z+|dE z!|6Kf`2FvB_WeHlJiq<+JU`*|tBZXTmzgF1q%4Yx%Gtg9G=YFhzjp4-<;5-Y@wK&K zIe3XVxnFay=FA*J@fa&Y#X0P6tY%VP8UI~sspe>8n#212L2fUY$JWA3&YUSAB_-~W z(S!sO$2MkAZ2g8I(cz3dagxK=d_h3;NmH_~$}#ms3=L^>Xfm5gu0Bq6)jCQ_%ovTj z!2ylH+Y2Xhc9w(ZDvy#>T8brm9+_F&*tF@V;6VT^mOIS)pprEvGd7!(rWx5R$&BRk z<@F>c#@sbWM(Vk=aU3hI?d6HtGl|)EfYsYCl9slas;ZkoLjVYezWmvlot0>~cT*Gv zL{W2hU7wMGVzn}+t`0%32f*(S5D2KK1MS3>1}mAb><Bxl{(PFa@Y z0Wva1vSUXsNs^tG{CvcT=`>HBi%F{m;Cj?EJT-hML*1SHou7|7K9%BIBREuc1pr0y z2L%D3>FxEZ07XSFQ-0)4OlAAIv1k#0q|YU7PdC-It#{3>tvw_suV>4**BO532&Rz< z6kh#;gM}$XMHz57Ji&wH=B64N8a`t21c}BMrqOZ7!%|^3IUiQg+36S*aJhVJ*zhB% zX~kS0JDpKwWsGk8jZ;&a$zL!bXb>rH=4hky-IerseH@;$f}))l@pzO+25W0AWMzFy zUS2xew||CQd5-y?f5k4IWa*N0b`{h;FsG{E^(g4{5~?_a>91?4sQ3#ZK5F@KLExn> zuZYv>9Tbd+&@(hlMNn04dnIgloP#`iy^O&i6Hxqg+dZs$Cyi}6OK{$J7L5@^tp_>k zCIP=dXN!Thb`8T4eGC~E%d~>GIDfveRI+p{y&wP&ZZx~yjoseA8Vm~HcKdL<@Be4~ ziiFk|iNAdmXr6|s9XM<<_I4Rpi-Fz<2l}W1zx2S9{|5!UT4eMHN-`2AydEt&gCE%t zAmA4=z64s+s*tHH0S#iwsabp_B$DlrLe^kE9dXa(7z#pUX&WJoH~ z(dh%pgdA?emvj=1uAJYO$I)zZlD*1~sP&`z0c|`Mi!F2@_4RF_8xD#MIlKp}PoynE z#BJ0Q9($Xyv7Mj_1f+O6I_#kXsjF+HSIWXj4FDz1Xilz$YHtLhJCfJJdH|JL%UA+| zCLlyTqN*x;kB|gW!U_%O?XxLOop^ zLp(a)o?9r`;2?73fQi0 zp1SgilXUmP=Q5ssD(;h%PfmQ|QKVuy3Cz8e?-u7N$Z@;3m-!&j0tQc4KbLh*2~7Ya CBsoR^ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json new file mode 100644 index 00000000..a8ed7133 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tf.imageset/tf@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3b7dc74e0909e92cee47c9c6d1147a6a3eb4ec3e GIT binary patch literal 711 zcmV;&0yzDNP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0(?nCK~zYI?UqYOR8bg!zjK{OgAO(-J{rV8k!c7srP67mQDz9)YieO+ zEkdFPAwgt8o2*T>iOI##Dh|BHboJbSPo`+>}*A!aULXQ91gS*+_w6$cweGx?gTV5)=^V67} zTO`A5#IWIC(TjGOi8t!Pl{kCCicT9+PGo))vv{nqqh~w4v=6+IZ7= z7_CO)@e2=Gd+O2aVt@#=?|eXJJ|J_lJe!5ZAV*6x$+ac{aN~SFeXdDr&gBzt)T1b& ze1I5CWycX%)s#utsOPz(6d?q%9HgvhGm<2*WSY>#NC*MBTasvQ^Zp&;j!f4e*n6rK zkJk^t>-utv3(VBq>!Gf}g;pbxV@X7k1i@gaZ6b2Ae)G@c@%q`hEg697+AiF~KAeqi zv>J)6*$MQyros{t69Fj5O`)^l5XA*%2HtH literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json new file mode 100644 index 00000000..0373817f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tg.imageset/tg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..09f45643b912ce3fca8e9de32467fad6e94b120a GIT binary patch literal 448 zcmV;x0YCnUP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0d+}4K~zYI?Uv0-0#O)1&x}LPSY|0CVzdiF4XjOz5TbRsY2ikCgo3Dz zD}4(WJwh!aXjx!Hi-L+?AgC07N+q)_b=pNUO)X~35C`em#;s_5OlRl~5kWDvF;n~~GP=5omk?A=B^#)p50yv+Pa=UJ%h*F9Jjo=^903@#$M3Lg=rbeRE7~YZE?k>%2RvYK@zb5gmh&>oYbi28WM!8R=aK>W4 zDghu}HW-=I9SVxVbs#{iT&A|Sha;0gbh&6(tD3sC6F7ggE-~$9MtW7T=@Tz!XPUTv za9}u~@B-I0>mq&!a&Nq>-Q?eh2v^%2w%=GV)2vQ_I%HkKCa^Ds<|tYpWtpdcvzoq$ q9${&Vo8toGe<{)bvl`JC(en;n9%2MsSNVSc0000|gW!U_%O?Xxwt2cZ zhIn))-;tc~=f~NT#YQ~L94%*i=Na%WVV-bsh4Tf*$IW-!%m4rUcsf-<_TZ6Y+uB{P zoceP3e`5(NGc&U?^Woo)!luo~6m`7C^QTn*e|WjU$|+z%eBaX(6E_DvKOZX@&@LgB z>CHcDg=8s*l>`Wz@Fh;1BJ%H7Y;dK6tfH#sx7LrZugkCgZ*0)Qv&30KQX&kb8mQ`L w&3nb?|M%CkUlHs%b7oG@;@)%X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0kTO%K~zYI?UlbyR6!JnzjNna2pb8+KZ_e$OrWwf(Zm>HX<`m_G>1Yob$V1&P?XY z#^T*9UjH<~C1Mxv{fsVC;5;Ldenukw42_6<_*ie;sobs%9$||$9ynnm-E77>bKQ;4 z&4qPp7tOvRr3GC2765Z|<#Z1j3ybr+Zm^?Ki`{t%YBA+1rd;jW8-y?sb@=@{>N1k~ z8bl@3XQ!9vGiiknG4G<~By7=a6eDl@WBt(iD6BHeG!!*ZKUVtRU zM-!r}k4_~4B))c1qxo6g1qhmmOV@De+PNJ;^;a2w```OyZ9}W4E58-4yk0Wcnd8^#FBkG;dEf=k~(_5&gV2zU$0G-h@cnYa}iOT2fq*V%4uhc)F5bo?>yO7DYg@&X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0+UHZK~zYI?UqYO6mb~9e>3}Xch$C1Hbr`2QWTkKMiF($2WdzLgP_PH z3ws(BbqG5}59}=!qIBtKhYmuL8bn|rnwlnL>e`_PYNhLIU$fi6TwI-5cT=*1zthZo z|Htq9=Hovj5L;LdWHYyvi*qdCWnN@5iXsNRX4W^;s-@sWlGn#jd^rkyytUG4Wt{-Hc0Ps0CjScogoZdM%BiCD-XpIB zKufoI+PNaY=J*(jE~X&}@}(=h^OAu4zl9{HZIJ6wtjn2a{AAE@C->N^zjAbOECFp++%|7?}W+SE=-eg$UJu-|b>vEKp{ z2^O73;>N*hPVK5wtinW+W52LGvY+l=lj4}5Pu95TAJkrZ%;}84Bme{fa#Nc8jtNR+ z|MnK@i^@n?@jaMn02E}_5fL^LoXF~x5u7=+1+{7{Y}7d^Jzl|+f@g$=IOL{GOSs<7 z{k+QHM2rS4f*|0M-0WEUnWoz%9NyXZR{|5+x9tPR(i>!Bvd!Ai`jw6@3lEOgke}8N za4!Txao%&Bl1N!~!t^30qm4`1uUTNQQ(Co=FoOfNIQ57hv1_n9RfOstQw}iz>!=P% z5~jpcXtkCU0y&bp;N)OV&USERYyOmhI=huP%+|3mxN%!^FsH>qI5E7}r1 Q+5i9m07*qoM6N<$f^H>Wg#Z8m literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json new file mode 100644 index 00000000..7221cbe8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tl@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tl.imageset/tl@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..174403f9c65ef7b2de29fb750d828166b1f60534 GIT binary patch literal 831 zcmV-F1Hk-=P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0`y5lK~zYI#nW3zlVKRZ@&9+)oY{rClq|bQmV|V;sA5pk9)dgS3L!*<}!6#d7iu^$x3mgSMi0MTh^z7xY8 zj+S}1k_7{oqH7<$efUek@FN0%qTwo?&&et}kQByZ?`@`faBvChAb zMIit_zhKAdC=XvI08*gp&fJ1bqfu2AAw^cYrEZ^`tI^1*xelA%a6Geb9F-|NNH&)9*>8*x;on1+i7WO$*8~m zB-nZ)O3$xRPe7nU zX5^-Xh??v3!Yl3Dq()x6PuONN4u=Du&xh0LWPE&_+S*$B`}-Ll9!_-?Sm5djE6oSZ z4?&-Rv4=9j#~@AW~M3Oxj4Ju<;ZAg2Ex z@JEn(m&)z)R#p^9O9ogJl0FJO1fv~G2UrkNy)OAzY%G=;y}R^)tdM$_%8lbzBF_{) zNiq_@LWKYT002ov JPDHLkV1iw?gTVj* literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json new file mode 100644 index 00000000..52dc9e1d --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tm@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tm.imageset/tm@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..634da5250a1a67e3d5b98ed617837dd0f6a8fa06 GIT binary patch literal 974 zcmV;<12O!GP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1A|FKK~zYIy_UUiTU8jwf9KqDe0_awCyw)B=c8^&qzXtxt3s&+6d~w< zgt~M>LTqg8UHAup0waQf5g{Q~D$2kR5U6~mB1#$}($-0p*oy5qzP7LLCqqOK1M1@5 zXMI1;PmdnGI^x4?SJp0X96i~uX@pWp%OLK#M4>?ELw;Yjc<=cc9;F0)se;Ie`!!AZ zjjQxBH5%OxgDIc+^)>3>81x6mBZc@!((zOvO-*d=^V{Yf@`DLFn@zgKB{G#!dY(FI zR?=W0R|cSD6^08kVtP9AJfc5ta(cNycVve%bBl~+m+9SaW1IeQqYwZLLZ8L_G~Hmp z)yi{215rvMGG(9oPd4h-7BZvhcz0=g9%j)elR9>!Vo!3xPD*QsGElhKq7z!RgVuvK~}5CGB-Wz;^>?3}aM zxKu!-Vs2k7(0)d+uTymT|7OHAG~K}ElRy6_gCZr&Igh(bmLQqsu^=ISl{$l$U4 zCUIKgq>Ynoz;Qlam|DV+k~ddApw>Se9*7}gQOvp6--p~@E@F)y((I3L>c=MIwny8v zPMV#-<;H_whW7Y>Kui@&A!EEaq`0}qcM~?*qdJ2qCS?e8GG_$k1u|;2(rnH4sm_%c z)0#$Sz<#gE@{Y!F)x)<8L9!Rf(9?oWInB5e^3(t>?1gkoCf$r;;LAinR8|M7h|j{W zE~{tLe47f<(;<)Fa+nEC4(voYP#{ScJ*KJ|F0Z;AWh9mtVR~t-l821Vq(CCk-Al23 zCdIvi$!@B{bdY1*^*FZ*;kr|>9t#UGsC;=ip?op{q3iA_)*%?HugMIS>=~93s zp^QX`xY^55c>g7qCN9zFY%{X{F$dQ#Q~hj>2qzH`*>+RDGo5E_Fvj8GI^Ne+4(!*- z_KI-6OskuWBQlO*GHlY+yX3Y%$9yG2PEFAr>0?!QAx?w?1yIPfIe2GsN!8<6{FeNJ8~od5s;07*qoM6N<$f;}V63IG5A literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json new file mode 100644 index 00000000..b057ea0f --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tn@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tn.imageset/tn@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5ca25a966a00c08d5492e92f2e9c336197aa3d GIT binary patch literal 691 zcmV;k0!;mhP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%%D@K~zYI?bc056k#04@$WM`v#)OEuFwlam+~bmLPScUkRa?(VI*0r z9mLr1poG!eB_a~)l8^;~2puYMBMVLNB~S?y4LXE|Lbpgl#Wh^potW# zf2U#Q|Nrx0=3$;kOpx9JMhR;g5s=mv@Hg4PU z+&8bT5=2pOR#gBHs;ei`(Sz$s4X(@8LlXCMX^3j1T)%|7;Wl#SHqbPp14B!DRuZC( zjG<3W1K>PYj-jf|H#EkExKl`b)r@zz2g{C30F1d1(c$-|A(o3cOMsleR_Z#!;lNtB zAM4&cw2?99A2cCk8HevA(xwdn2)iAC`Fo8-I=W3V#HdK*JR)pXJpJt``MF>iMA|wD zw{;>E8E1_@_IUv9!zj}QM=<6>W+8!uAOO<(R8k+^$9AmfkI&WaUV=V)?2qgTA z*Mqan952IqumJn1V&q-fvAt$=oN(YJYIkp|gW!U_%O^81FsgaF zIEHw1zP++B>yQIO!$bR|rBirJ^^}}edLO*FaK}y!jz#(pn14w5Dg6*oYVu|;S9h0n z615WP61e5GTFB^#(+c000Xko1aW&2;+fjci_QYLxA-|2s9=Bh1Qta)|dtDmV+&JI; z+p+_pS6;UzOGGRd+?X=SWv$qaw%=V9zWdIk-7%H2DYIIrP}lm$^}gL%-=&AHnN)7p zVKDn_dHtsiL;6{@sGTx=DT`n4(VHHhe0|%-<-rWwUVl9(V6Pzl*Y15^v+c}+`&osP z&KBLvV_xvA=%M4IrI((!zGf;|lBu%lYBN(=<-aw8p-(L)D^BxjZDM%X`=(30J4R1z zp(4Yg)p6$y+MVOoSFe42(0SgjyXmSQQvZI>=QH6HoGf4nCpPl`O7ostYb$mE7={d< Lu6{1-oD!MX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0%}P_K~zYI?Uvt5Q(+j#Kku14XPetJDIsUloi;@5hlquAlN5;wX7w+G zg@MqIi^!`Wx(K1VD(Ir13+YCwz(_(ODyfU|2O$z@%%PdvY&*K`yr+xBw2_`UDZTJ} zb$EH6=X~DpbKdj3V$xOI4WgBel%QMLP=ICH0?E`CNT%{~NwWENVz2ZgRF&k!Hxi$Q zz%>6Kh`PU;g6o}V^>yhr844q3=a}!hOZ35`oPn}#jkBeR9WQ#&>g$l^OdCCNDPl!evFFOi=*i{o{n?at12me*^4n1 zM25oa12N2pxOz(kBUv5#$cO+SIY_Pdnzz>9fZKPs}xsjGxptOEIjMW`sGVIU_`9thNcu2;ORJz>&!`P zr6noIXpDuvej+!!QZpwP3A)z=k_jc8PK@apFpS&)mVx9neIYgMu=qEuMVsb6vIUZ< bO#|`^;p@|g0y<8#00000NkvXXu0mjfSK>*F literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json new file mode 100644 index 00000000..37f9647a --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tt@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tt.imageset/tt@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dccefb1d84b332e56a4ebc24a9108319c390f0a7 GIT binary patch literal 963 zcmV;!13dhRP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x19(Y9K~zYIwbV~Yn`Z#W@oy5vY-+2Bom#x7I!?irUlDqXH$@?RKl#?QM0(WKy?5$o=*B@n5tb zU%qTmoKBuRdW0lN6rZuNF{b@~j4LbX4j(S*|JTt1q=P~B&zhDRxg0}7LoB{|gK>EoZB30h z2*4i?AEKR{WMyTA*4EY%%;4Z4fk=b~zaLFil{g5%@AvLee)~3|P>7b6mV%beW*Hb5 zAh@@OF%UpgSt$+zki2`Biu?DGWtryY=7N^VWa#hjXIW8bSXx4(*NcMyD3g;Mn4c#c z4r4NzN-$2RlUF(&hnAMmR8)wA03^o8sd@YuS(a%m+L3fRjl<#K2fdzpuNTV7#6bW) zT))m2!62)vs~C%RB$Z0h+uO^J_4OR`dO@cX2SHVNf9VoU;V{8q5QD)`koWiZaX1|O zWHMoxodxZ`|N6f{{>HdmeEIq{vMf_uTU(Hm$s{(Lji1}vFg$nw8jT`hI0 zyJ$?b6D56p leI4t`ljx?W(H}b&{R`CYg$Ct@bp`+c002ovPDHLkV1lIz$uIx_ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json new file mode 100644 index 00000000..0f349490 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tv@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tv.imageset/tv@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..20c6a43d5da7f886011acaa8569786e3ebabf3b8 GIT binary patch literal 1345 zcmV-H1-|-;P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1olZpK~zYIwUv8J)nypRKflX4NA4F~xY8WhmQq6vcjIiPJlY3`c5hi+I>M)N-Xs!Q;3nHn~+%S(?g* z4GU1I&v>7&22BO zOR?RE{TK;lzr3hVNufinMsjw>|K!O&b7qT`Hbb|quh3eDgh=qsVcWFhl)Y!GN;MWSn-^YkX(@IRtL0%6(NZ!mCe1AAbq*TMXX(eQA4Z_{s;i=BYsdR{f zg|W(3WWmgEn8dsHUV16?pOn6k<0Ko`s}LInCvVvp8D&4l4>i zWr-0=R2rZosJTSRXrJo3lVvfX5&LP6H zh{Ls!obHzk{*H|-^}0&vxDqn&zQ;}7RD$v{aaXk2){M%Hc&J(k8CyZPXA$A!i*b-U z`pnm~dlKPU$YQT+sP*1F?sTHtBGF`WwXG3IJ=;#ec>B=+O7zX(kGXw30IIrGY?I!)>YScu&Zn}pWI5uXjTFAKp;Gm%@O5Dw?*Rg{kde` zeIG-wQ-E*O%loW*R)`UU0GzlN_P;U90F`t|SrPsLj4k0D`noB}00000NkvXXu0mjf Dx;KqG literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json new file mode 100644 index 00000000..dbeea730 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "tw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/tw.imageset/tw@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e67b370ac95b6ce5a5bfd3292f0f4888cb2bfc46 GIT binary patch literal 528 zcmV+r0`L8aP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0mVr~K~zYI?bXjqnqdII@vlFIrEP}Qp^<@;hDf=R9Xbd*1s+7(!9So& zhlCb_r}7Z&9}rL7z0^Eg9RiJY*n|-G1J-+}ToTokT5eRn=?-Iqy*Uec?DT#wFFX(L z!-t3G;nBR{)z=J92N2LlUgPAjm0#azo6Tx8zrUlSy*I{0*Ay~4>%wa7A`%(H~KxUayrz;tLi_2a}UeC=|}I+s(pvrXl3|y3Xe2OG>2+W@bi6 zrF^Wd`B+~skW6}+m>8g57Yorh8oauyvACEe7_|RA9|nVtSj>apzsk|kPq7Lb?1)~k zWqR6)$Mcw>A@hy7{(d9j@H5=*zV-@9Npw{C&c3)*xx^AYwM7?xwo92RtW@bXtiQbYr`|LyZfDJ^gRm;&nXsvkVx#1 z%^nkpj1dT=D3vaRBK`~c)AF)}B%Kio4UGu`CWcZ& SWV@~a0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0&Gb{K~zYIz18na6LB2C@%P=ff`SzxL}H<5y7hw)(P`@DeAuJP|KLX4 zvz+2BMt&%@)s z@aDzmz9(=m{0-hTP{WbDFxC$Jt)S~5%aF?zz0g+oQ>epsElImP7!o zA6|3UD#B8scz!jkIxZprO0x}xl5td|-g&NmtVl%if);?VRK7w}lc6v$0QzD(5&Z$#CEt8mA_AbaLh2H99kc&M z00;so3Zzod-RnV(-zGFZOLoZzl(DQ%DNHZ6A?pvf0?e@#5dg&psmt36p-?3XZq%6= z!STed2(S>5yr6YMxY1CEL?D~B4uBGcuji0w9_<-m&YmIyp!hcxj&3X1iP)tueT(3W zxqn8$9wLq@ESyD-Keh}oXG_E}g&sGmev{xt(sl%Fib!72dLVqFT7@&n@h4>km?K{C ze?O2Ogg_k(4;%M_od{8cp&`g*426-YJM>MYDvAJbUtqzTOjMyTe+qf_X~hBNhI7hBWuME d{-;9m`~_jR4QS$A!+`(*002ovPDHLkV1j}uIy3+P literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json new file mode 100644 index 00000000..0a28ffcc --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ua@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ua.imageset/ua@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..776abba873fa49f62e08172e9fcfd6f3fdd65c6a GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxl097< zLp(Z@x2%6tS@U7yKAyu2OzbMezkXZcvT*`$3rfr#Exdb&le?sxyX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0m?~4K~zYI?Uq4ER8bU$zw3Kb^I}A$#XPZMB8nD5=)$quR3Oq~Dh#wm z%UUR-7;f9xHW5K^rhS`fBc!--aIoIYXta!4Mbr#UCSlWz=%laXqD5c}nM?HE!XNJH z^8b97bGYXKqyX{wq#E#v4ng+IeD{Ji5#D$Sp%iQ8`Ll$9b}vDIx4tQjZ$QlTM4)5@ zB(G!MvLZnva=955{N;W~|FE_`ZtLW@JE~+>7mZfnV!dW{J5Jl+BN7uM^z~dJ+&f8e z<{```bXW>nrExFCh&*`Au7I=hiI(;l0qYp2$0l*3*L5QGdZg*rJph(6OIWr|?Pu-J zUEh5z5Oa3jEjF7h*JFyco#_USHijC>XY;JCEMvdUaA9N|PMq7$Y`ClS-2WSTi6_4s(s3L_gn@xO*f;KCUA;*%nbe5{ zG}nOP_^@nNHYMleB)yoHO1UCKgG1VDfQoi9^=*SLofm}dQ^9ETT9aWY$>!4KuU`ta zgI#~?cnhzTlt=;nIsyMs&wTU6`v%0^`P@)Nq~IxqQdP4UKN12?dI|y|-<0MMWWV+R Xn>y{XTpHDC00000NkvXXu0mjfu2%XO literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json new file mode 100644 index 00000000..63b1ebe8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "um@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png b/Passepartout/Mac/Flags.xcassets/flags/um.imageset/um@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e286037a871da3d55e7bbb78bbbe47e5e9b277cc GIT binary patch literal 1229 zcmV;;1Ty=HP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1cFIKK~zYI&D48Lm317)@%QgJ&*9wRAaa5oKum5SB8engvSBtbQfXk; z#A?&DTFtQK+A^29xi(xE=PJ`VbHgrdXi_?-YZ=}pQpRO?;efzEt_RNbIdIO?A1(iB zYdhI?`fk7N`_FHC?X&MbVp;xky}i1aB#&1?RaJx#n2mZ|9v=YFW+Rhs??3JqlL42< z$D77+7Ri3X9zmUiMh-47dX$2^bc7HT0-a9FmRD9Ggg}x6 zZ*5vlRFsSmg7s^bVNZxd7>ph{+TslNY0YLuRBYJYd$Fk_N!DoC`f52Je|engV36uf zt2t168n?&K`pRM&ue8zKJ48`o4gkMiZY4F@Mp0o7N9ukCV1LaUtbFRR@DqVLv3mUn zj;WBEdT+!@D5N4uf`s^3?)DD@kd>ZHOPd2(){vJoo2Kix0a%!q#`RVQ)6+q6vr}p9 z>|y8IFN{{KSnLf~5%dSn%C7cyS(}kblvc~|=mha`(M$(}`1}Dh8VQXg2!=vTI=z?- zdVER%0Fyz_nA3&Hs7Irb2!&K`e^e9q%N~DR*m(%dvM`teE$!WCWep#0t71n@Ej@k1 zykGr1`wsocxl65VTvx)C=1v;UT&1))A0eRO%vEx-X0bRwivzW%0gyA2`>i(JWY`cj zI3_AK?Cwpl#U|b99^gj1gZbIBnUk7G{mF|YJ~V^!(n7xY`Xok!j@Mr<ZZ$UUqC=d2?+^!DzS&Wy0AcD~>L`B3p3!JrqBl z%Y|zl=yg%dh_&GLDJaSmY5GLWW<5hAPG+Yh0N}Vgh&9HH#cbeaS3iCwz`((S8J7<4 z3qKD*pDe}A^pzFl(l;q&kmkIr_-{1%UX8S)B><; zTNS%L{g#1yV{F;Diu#imG0vOU@$kIlk#HR$uebkxk7#8Ln_pbP{v)TD4u;rNRl?Ew zbGSS{)~;I0<>pR$`i5At@DYT73)ebGvB$GGKa1~9Gy)IUBPGvl?F{I286#tpSYu2$ zCp^T*#o+S?a8A0JWw$XnG)_oWNwLS@@0Y)JNs>s2x6;)!NOgH(d*u^zhr?9_UG8Ri zYM{?(ou7-Us&wAzCv%RSm}ny%w|a?J4@dAEty+bIZ zQjnKM-@pjt$Lh0N8jgmahhRwT*}nIOF(sH2{_np}Nq*XBc8V?hW_7ung{rFG18e>Z z$OBBB-1XI=e#vNTjHDvu_4do%wcprLSsFjcxC_ zgjT*4NrgH!?UF~YT(zK*9!Us->mo4eKBUn{Esvxl=ntHgwHA{ZNRA{#(rV3eW7)Hc rDugqV5TUAyJmq%lP_af5fX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0;EYqK~zYI?bc08R8btq@$WhJd1mgYIiq1Jj%5}IRuI*u1Xs~2=tcBm zT11Q9M4NU&5L85~Kr13_j7m$L86TRtGk4}bo)$%g1YOCfg}?nd|Ic~)bHtTf)jPm7 z{%!8ae+>AZ1IX?iKz2vp>i|<1M6se^YvfFcr3>WW((qz7+c8P1h!cflN`wF@1f4M9;gZMMi98K2 zrq+s?KUvHS$#gUYOJW;>h8NQf({BL5)zf`!cM?YW4f-98g_SN(-?s6?l!g~mDVw;q zhSy7eTO-qsR7w`h^?+0Vl3!R47gjt!aId{Aep-s9A0j%GLENwv*JD`uyY@M$OF{A8ZB zX0(40O$uJEbvahH@OmkIj>ha*j;5b*ZX%CTUtdnq(a;50hG1&g;`MqDU5ZSQOn0Q# zifH-?mC{$p?S~CU`VHDa%8O4vc}p@;av8{J)LN3!0fS1(VxtvNYwhEX04#p=0hm5) zVH=Watw)?H)^;N9E`H|5{Tk0c_}GSIYS=~ySX}Y5PM;l8tpz-O<54Q;%uN@llx<8+ z5T_7CilvPnlVyv!=>la}=g}LFYCXsd*;8kI{;`V`g1Kpz`4cYN9f$W@Ap#g5G#Sk6 zbb^$7FI#)+s(Xe2EUfx0Hv)u!O3D0Q@YGn2cbfsJB2(Y^V+i~x^z*70SF_)TU**5~ h1{^?k=K!)hUjPc93j$J#22TJ0002ovPDHLkV1n1{SD^p^ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json new file mode 100644 index 00000000..f5d86335 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "us@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png b/Passepartout/Mac/Flags.xcassets/flags/us.imageset/us@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7141cdfd85d2902f61e75297e530568144b7ec GIT binary patch literal 1167 zcmV;A1aSL_P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1Vl+hK~zYI&D4KP)O8%k@#p9J{T_GR4}KgTaXUOQK~RxML{TRjniFFp zQ%sv^ZJJiAnYQ$g%$3fqjmm1SVzM+h?1vjVDV=kx`4fL-;s8Aq4+I6_IF29p3-9jR zA1(jrkN!B@uGjY2-v4~I$KHGIB^JzlsjDk4G2QD6qN*xF2#k6iBVIoM2}V7`qrQKg zO@??zynf!+4>DT`5KSaiQo=73KTlzP7D5OL^Rrl3oR1KKbn7^(DoYSTpw(*F{8~9e z2qa1H&cP;~U<_H7kR?Gl5@Fcm!w|2-9~=X~ z5U<1S8Nr~}Akb-DU!k<503o2^^c8Y*CNQTUhy8V@0FWo!JCoA1L(xFQ^7VVVtf}Vo z_KqH!TAe&Mbt028tkj>li1isW6{SUd{oM)l@mk(|wT!(r#{k%}se-Q#{({dRF66|os2W1nUfR~bad0e=93!OF&bFvAaKS(h6 zm`t4&qftkn%fm!_8UW7wy(A?XF&X1&yZ3-VaEzYX+U$!5_hm-~k<8-)WrcZk_qaIH zaGu#Sva#DN9BDXDx^)~Y%I5M#?QyhP4LdfkVrO+70K2zUvHSBM=y~L3^M-QjPh7;1 zo9lRXx@{mD$dew?C^DPYEurSnNkZWW8><#`xc&?yUO%hK=X2@0gU;?g=FXgg5OCq@ zE$lW6a|&|!@%TC5DSKp5`Bq0rqn+$>50jK=z%%5YA4&!oG@h5Kmzw5Eo`(QV|@_rE;mejJ`2 z)$f0#v>?+p#cqkJS%s>qKLIQM3&_(%X|Fl(P%&sP#2nID_q`3&d9j9wk=t#16_c?r z=8*r*jWliFF(_%`T4D|vXuM(uby}<;Vr+Q$fTGhaj5S2jm`ny>e9R$d%a;2E!X0x+ hXk=6msyWt>KLH?=v(B>P|Cs;)002ovPDHLkV1kX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0*^^VK~zYI&6Z1O6Hyd~|C^blu}PEWHF+4ONHMLCK1_>rp*9N@L=*)@ zP!PAeaU)&0=+=$y#HAZSkQBP8RMb)`vSYW_W{2e}oHx&`_ zd6|B>G@>YivAYouPe4l-kqF%bRa!uYhQo^|7hrcdu@PTWB=B~~8Hs%Ph_%2Y*g8uP zivg&s9QJ4h6v}y+_1*ZoJPxMk4je8I0N}>ieMn@=ibzYkeZ`}Q#2)zm!yqDwEkz_)N4tmo{h$egfSHM#uvko}W~V`j9)eJU+H?Z8uJhRWynO-HAF8#_k3H#A9Lf^`AyMD`8;t z8rDKfI6OF9w{hzJaqv}95eY)b3Tf19YPA|Dic%!lKk(Dv;#*otl9~~0M+hNW;=45) zoeQMgtrYQjnP|iA+f3-;UK3~QY-?#oSVue8@US+K#vh|*LO*!A%KqG}v{b@o(y;XN zg}7@jkZP%j&&#-WO=-x=DmPsdai*0LlnT@IpvR<4FaJNbc1>x11Dq!8T(l&#od5s; M07*qoM6N<$g5#7&P5=M^ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json new file mode 100644 index 00000000..c3f9e3d9 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "uz@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png b/Passepartout/Mac/Flags.xcassets/flags/uz.imageset/uz@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..bc35ebeb56633977e5326dc4e9c74d40da5bb486 GIT binary patch literal 462 zcmV;<0WtoGP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0fR|IK~zYI?bOdJ!*LwP@#p93Bh6|iN!iqdHcX;W^P@;PI7m5i_7^zu z4{&o4Qm(X%12^Tcl)1V1aT&E`mN36-efRx17}a40K)bsvBgo@8nEY@uFw{4zhKTV$4^Qhmo3w5U>$T0uZ^n zBlh$Pz-F!s$C6}~d5*t;>|NflewJW9x2#>&ZsxoFCpLJ;EQ-#m>CF~^3OV?)e&16-i;AM>2eA^-pY07*qoM6N<$ Ef>TA-1poj5 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json new file mode 100644 index 00000000..e525c571 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "va@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png b/Passepartout/Mac/Flags.xcassets/flags/va.imageset/va@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8c677b45b8bd69af2cbd88e6c280ff350cf358ce GIT binary patch literal 675 zcmV;U0$lxxP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0$52zK~zYI?Uqez6Hyd~pP9^L^3|B6HKR?9l~$}`D^>gfMR6eriv9^v z*M+)wTPSp;h~QEYH?GBnq#%MtTC6s-HMJ2VZPSD_Gk4}*7lM!mw9pAI+IM&1yocw$ z9L~L(TILyWi@oT$+LIl4uJ5%&P&xqFsr>@tf48*ZRN{5kerP1l2^zDyVIw-1w(2z(jm1YcGfKH>AzNe1pe z#d4S{uO54ZL_&qVQZ^~(5|*YK!AxT zr6@0t(-p6w>n7Vx4ddHAj^r2dqYew7J|a~VU6=ItHL-J-Is@W56%x^Py0VV|Xe`_$ z+JBb%moh)A8rj}nP7DnpgrHC;VCP!>fq__&ENj&ao|?k>`h!|zgu}KCK;P*YD<5X4 z%+3-T?B!^-(dG|y#b^5_Fw|?juti#3WNU5?r&JX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0hmcdK~zYI?Uu_cL{S{aKNsVb$s;q(Vq)Y`m{Mb*#7;^n_L8lVWTPZw zO3EK#qclr45(^dUmxDG-%0$67Xf2k0tqJS}I)WGtFi<1v zvRvpahpBy7Jcq#=k*6v!;s7N+4$|U$o^~6|oc!+8tML3LuE{;AvTrSd>{PX* zX#g>#fYTxB90T;*)kA=aJ@Qoz7HGCYoe9iYe+UBLa)>>nRhmIe8du^||NA_mhms)C Z`T#;!WU207*eL)2002ovPDHLkV1k4G)SmzV literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json new file mode 100644 index 00000000..0fbe4538 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ve@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ve.imageset/ve@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..18053a4a22cdd8d887f25b4d5854eb98554c9aa1 GIT binary patch literal 466 zcmV;@0WJQCP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0f$LMK~zYI?UcVu0$~`(zjxkU{)|9qkSOyHXigY2yD2|`hMT%`8>}HFO}Re z^HcUG4SGoO(%hhXDex0TM2aFJMG=ugto7PQ3!+TvIu1&lVzsHKgX#lBg z5#z211flgSBM2?nT@j>iiYO$4@Vl+VB19XZX&SM!N93QYsPWyWtnmUo!9zS0Dxhf^ zq9}InK_YUr>qTgN2JwqLNgMzWKQAD(HjU%xGEtsrBkAl5N)?`1;*0xy8I@{-C`);V z+?iLEc1(7cKg86oXP7|aHU|nl6#=N+zxm=75h;p@6h%bJC(K53ow6He=Kufz07*qo IM6N<$f(U!Wh5!Hn literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json new file mode 100644 index 00000000..d42c1937 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vg@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vg.imageset/vg@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0fc071170ef03b2a43c2fa2cd2a5194cec996a82 GIT binary patch literal 1435 zcmV;M1!Ve(P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1yD&uK~zYIwU%pej8_=PfA9P5zMI{5ZL-;HvJpgzX)a2MsG=?{b(_Hq z5k(b)s!D~r)u>UUozZDci{6-as)`ZU%uqvB1fzqg`!%;(#pGg>-6Xr&?C!g7KPX8? zeTn#gd(NEaoZoq#|D1D#KiR>yJ@i9|XW=Q@FY~j(f|N(e9_8 zam+Z)Bbm(xKAPB>@xei;*zY&Nj^-IuxWw#HP8lZ4fua4>N=pM86#g%A%Vx!ox_d1opu`)lKA-_D9--)06R z$t>8EgJh6N*Huz`^eC1wW3k#TtWUj1hQ*70(IWP`9gLf@l^r|IQCsVO1`Oevuy567 zU$4XnC^B%G{Ty7~y zu5hyNkdX28QRx|u1Hiq3;}}z5YcYt%YgQJf9zCAA)D@=$ z1w}0c0df3BXJzWzGBP$+^MgMXdGd4sd_^T3*Ag)g90-7U_z3c%UZu^{X@tFAYD%2^ zQf{Z`*Dg}mmht`;XNw^KL_rXkJ^M8-{<)C%qDpZsUcjLWGyQ*yV%`^LA5YXYm@{V^ zseQg;cg!H-mn>$Ibc6h%4_G*%OEbT;M7m!$Wm$XQE}(kJUXI!Ourj|b<>e1eXR|3! zB;2`E#r*j@S+~x{^5vtMJhwg5HmoOUtiqHXZgRd$q_EnFLLHSM35_s%HHZNCRe^9Q zj3W7|7ff`l?#8Pg zp-~Z(!O)~NPlITwG)<#ZbcnDfkY*21Qs-dFtz zk##bvrc&m0GdRvmutB4^s`=Kf4ieVFoGUltZjgAxk;1<6Qq~yF=-eK1?_MX(WJVG- zT&f_n9u%{@9BC8KQqH8ostD9BR;LUb*e30%zlSKrn@fqvesXK2adzhK# zA>I^fme=YPiHWdrsMO3|mq>|MCf(O~{|rv)!}9G1h?E1=G#F65^78?ilo`jkL<>nu zEXkJ3e11_TIzrEd;(Y9uwv?0=F*T(chcS$-%p@Tg;>dnI_4OeHn4Jq`J}bn;@eV$n zxr=C1DJPxtI9z3A%auLIx(4b(VN$Ikmt7j^aVbno9>vJSZP<1BsB?1a zN=9j`Rm5o2W4D_bIn+$fgd>#PJc&Q3Bg)>Dpb$xNqDV>M1!663Dm)5qX*xNp6pTih z!orH&Rs(6OjvZ~RTog%^bO3$e5{jXgggE%SA`#K@I$QFR*}k*1$sa~|J|K^z*Gr_O p#bdVxsc+D6X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1zAZ%K~zYI&6aCyQ)L*(f9IT@cD7j4D8@zc8Wc?Mij!~$=eWv1U~_XY*Ohi%xAoqh;|HKH zVKP1#{C|4iyzldWetDmq=RAU@X={NyxUyO+USWWo{+}R0e;1mjU6w&C8X-CozU;)2 z!G2Q7Xl}1N|1hv;1#y#rXrF^FzY)8q5xpUAT(i#h7W^G8Oe&CZ&wd}Pv+Q4!2m6nb z8f-_6w2>U#PkzIjIE!Xp2x2N-Lh#V5C?nnI`#r~PtPPZ(fw%yqWZGiH>@dM2 zt1ufy>=upas2|&@kFZ2P;n02uj`C%AYnLMk0+J*%#ny`?3Iuw0GpS}d0Ac?@0v)Tc za)>;gMk=!izaIxcbiADtsIsw@+oubBPu@~0l?(_vh2tbkBITmC~_aNVO4zcDg zH>-c`qs%5_5e^cGD%@22HnH{ZDu9|n zU-39o8Z^E@`mk*QGp_hhq<$# zBzpV}B9RccEttiuK|jN>(|w@0#>a3r1%Mc|p_n_!lR@+>q%A(3#EB4ZZu^rDeI+>% zNfgmZ=h|3qrI?J=mpEAYV>@oEiAt}R>wVXPrqOZY2r+Xth1Y$KtNtb8X?fhTBx0jD zrmw(p%|}e0^&GFXg?RVpgG{mNSouTSxN&1T>!M0KFSSQlR8;^#gKq|An~C3g53~Q+ z0nCoXU zn=4LNv%JWMEX(MPGOZn(IrK*d!(A;5g?cEh-Ah`h=3=v&Mn>wx={rHZ^DPpI7-}|) zUW5X>!efmN7B`mX?x!+YQt3=?Kj!nb81p##@Kv~M3IJx4nM!8`UBMo*36-q}w^AP5 zfz_Cg?3_fx%ONa_766SVXQw(66LvQyUv?H6@8!IIqi{Z&vSUz|9m>0OesTff_ z_YT6P=8;f%kd@!QLv3msK8Fcc`9emLc4D2ckxHgH8B{SF4H)GF`HGCrbt~qA2IBs2 z*zmi6=$yyXci%Z~NzUlf^N7>#;OQlg;<33no-V*!cRz})07=qgwMY~?j1;@|*sU^> z2!be6He)e6)MnOqI#||Jc&QY?1m}@FqlGz3*3fIKW7Gc4cq?x}nfeg%w1`zPqn9CH z(UCGXQZ@HkUjKd{54J{$Ij^C#YW{>kF52S9(-R9G$^CtOGn(lZ^^A0X3Is@7Z=vq$ zr`Xc*C(rE)A*fjz$~+VHzATWl5NB0ZcRS(2I)(@KFuAT7fcY~kd7&r3rehIqEO$=a y`@bBXlc_WY{rJuAJpH%B^8_J)|LgF4CG|I#HuFG2-#|tH0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0gFjQK~zYI?UXx9!(bGKpD#_)(wns+C=O2k0HIO^1w{oHFGXD)J3ES# zuKoo_K~O<(b#ZcY6Ws(6+)8OwLiY1Hl=h#0a_W=)W)K|tAilQf=T#PLmFv50%ge{p3QtAfbvn0(tfBV|CUE% z-YDb~gH&#nU%z!S657fDrM(cexH_(O#D0~?&&Mbq27hc&xs%CF#W1f`H`X4OwF0Gs z5XPmy={s#PhW+ewZR;&H0^}L9@mvOFuE}|~K;%RPX{p|xI_%khv#~6D8QCF+Y z^pgPjWQ<}u!rMj^Co53b3{S3}K$K;Z;%=D2P6VeY05Gong4*5IJ#&GQIiSQ<6otw3+jW^s}EAI4;RyK!3r5!6951J M07*qoM6N<$f&;M5xc~qF literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json new file mode 100644 index 00000000..09ecf5b2 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "vu@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png b/Passepartout/Mac/Flags.xcassets/flags/vu.imageset/vu@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5c1ec83f7faa918db590eeec21ef48c2d510bdb7 GIT binary patch literal 926 zcmV;P17ZA$P)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x15-&vK~zYI#nfL&R9PIr@$b2FaheSKbB7VfXr^eI8J)~O+vJ#Rf9WNp zB8H&dgrIi&hbhIrskV`P|<*=Obz{h@ zM;q&>)(nY&G{Fwv&;kPkP+SZ)8#FXP)nj6$VwM)@X!{JWCm1sFPv5Q?y{r$AcuPTd`ro z=*cxTuw)5TRYCo;u_FNP-zR+t($WH1S#bS2Y}o=USE`4!vU2p~;T1{yLE>%aIC|b7 zPlh1DAne!y+qbLNwxa{Oy5Qcu@SGVlpr{D8ZiOR9;L;;Q^MV4K-Vq}yV|9G({W>M= z)&v6Z-~oL3qV|zHcfu3gZt!^2_tyOs6XR; zZxuphMiUSU&0X*Gq~OL3$&hJq3L$ipfe;Aaf8HngpWC>}X#fBK07*qoM6N<$g3TAP Ai2wiq literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json new file mode 100644 index 00000000..ce046b57 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "wf@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png b/Passepartout/Mac/Flags.xcassets/flags/wf.imageset/wf@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..62d74b4234bbd0e63fcc2d2c282acfe986a5e93d GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json new file mode 100644 index 00000000..74713980 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ws@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ws.imageset/ws@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..07840dd74d0ad1de536a9f98eb9ced6f45da5ce5 GIT binary patch literal 468 zcmV;_0W1EAP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0f|XOK~zYI?Uhd`gJB%UKbzO4g~&o#OxZ=I{22!q^5$hBn9a zt%5C(yhydRn3efHJnm-9rca?*Tp=8J z`;yrAdKe#ciWLckWx8E{?A#g%W(fr}?*miO=l9`Y`dF&ZVA!ach|n#@2*1x9*0 z>N)h^u(orOcL~T6*1N|D_m8icO-2I?6J3;8%t9m}OIX!Zlv#Lwk?EgY7bXEeeBUNV zCEi6hoy|5%i^aXh&ms+#3=cFiH|8QLCxnVX1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0-{MoK~zYI-Ih&A6k!<0f3rKYtFBwC?Pe>4AFbsf!6j26iXaT7Yta`S z6fC5mF6B{=bt4W^3;5?8ofRbO;wBb!S(_@PB%l z=l}kn-^}|kyn^f0<8CzVG+V1~!xjT1wLL(L24ThZrh`bL0lO^=fbtR>*Dh4xbmZW4 zs`o^IC3P;xrQ?K z7u&E}B-&c4Xl-(1k_;G)0=YR-N)Ry>#LdP^LScoDt`WRbi_FZ02!s>{hJDmE_mD`a z0GzzsgV|&x5K{1b`av+PAP552FIJGZ!_1wBLj+|dGmubN!M_wG5{(myC3w<1k*qB& zMgZ7j4e~u`ArcdkjUGMoCVc@}K~=RiAyR?>baaiZT5C8kPUE2uw7)urcixVw{X4Lo zPd}$>0qB?!Rnt&4ZN=J@--f}U(q7j`=b7j1%lD_XKP`~eRO$3_>v;d45JAIgigDxU zdjuhM(+vSJi*ekAK2EqMv6^Ck)tuHKx9i_fWc!siNXi*mmfa$A$^DUC7MXI#!m7T~ zd_U#8=aChO`B2WrgZRVQ1fnL66i=_|69kRs>LEhPD4v-@?)O*g%GZ4~2~}Wd)=4a( zZ;M4z81Xsu#-}$Uo^MWGkC*E5PX5f}?L^7ufB^K4mC`@8cTG=16?iakIIUdWGqSAd z#hu)JSIg*}gDW+I$>;uXHep3Xj)~msuO%8cZZ62O`o0#^Tr)@@V&;XnjNY+Q3UXzv z<|w{EZrXVngTxX>JTrw1&ld3Viwl52)SPMD`YuLtOkydTwVsHiGX5d}9RvFQ5qh*e f?yMWB{|4kYYm4VX5Hj>G00000NkvXXu0mjf*CS!6 literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json new file mode 100644 index 00000000..7c10e9c8 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "ye@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png b/Passepartout/Mac/Flags.xcassets/flags/ye.imageset/ye@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..0978749b3ca7d345f1094d6b475e8dab29da637c GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^N|gW!U_%O?Xxnmk<` zLp(a)UfjsrV8G)N=sc-QbOz%_N1ecp2DV8IhqxSA^De74HL+DPF8?rnUHzrd!Vm6I z&%{_Z%bkxB`rxl<)A~W=(CSOu{3d+TSXGd>Y1!+=8jrNaihG?ZxE_i!Z&Ykid#=-E zaLlBkgPp-|gW!U_%O?Xx5M eG`?WL!Z1mKXa7E*nWjL?7(8A5T-G@yGywpH!bC~{ literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json new file mode 100644 index 00000000..362c18e6 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "za@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png b/Passepartout/Mac/Flags.xcassets/flags/za.imageset/za@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5d2bb1b4eb1b478576b541a8c9fedb77962b1097 GIT binary patch literal 1112 zcmV-e1gHCnP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x1Pw_|8GB6O8F>l9SkZmfdz46=mrH!w+q&-GMRiN zBx1IBp%R0;@J5#yL~l-g8{U(q+xp6gMIrVi8P5R0ss!bOY!uj+P&|XJ~K1Ybb_l_dC=?c zK`c&;$mtxrLqHfiTR{6*mny&O6~8Ow8AfB{HaHwk?BDN=yU1G#SC+TrhD?{@GXS7t z1x+r@ZhPvx1G`TSpEoiRi5UI;5_ERngishik=H-MeNL4A^XGi4rsrAf5T7v9u>u(| zcY$Q^X`Cm3@t51a5|@T_`DG*DRP)hGF-Xx8w7&rlZX%ikK4DV9AiDFAQtlR%%yqh&}(;dv!WoG zY=?JA3#N>9-v%XoaS@i5rl8dVCR5%fJoKwX06-)};QLQt(N&_#8|C`769pp{f0CN* z1|Ek?b!a{`x8&=}001`IFeoZ!t+C>E53Uhe=0G_{e>w$;kdNH6bF!f~rYA#%36 z$`r+Se${;)O%^1vW{`~tP4%*h0IRa2o~O7An%jlrV?j~nMnCi)h&@@C34|be={Pip z+AyBXM7^WW-K_jlIb-Gk^YJ!WS7e!A%y>Sp4kDU?t4;1ynF?>Y0R;bdkwX<2o$5xA zLm+Q=Da;kOcgO&2iKhr}y_YL%#1rK%s&5q-*Xy8!h^*)u%{jMh=ncD4Ni&31;ze1} zo&Lk8!^!-l?2Sr9XezWuH(^#|9F6&@}Jz_HoFe^6BHoyCUR9rmme zsVT#F&*w-I@}XHVSy?4^q~+R8M>;&|0*NLNpsiZ%M8s%ZD%*&}BW8I3utk9251-<9 zT_vh~6!+nyEL7p|6|e>Z!hF2v?Q8GvK2{1KtFO;%sIR|U9tzQ$UdOznwYY!g1RO#E zG(8KcgALa0^2j>1ke`|}V>;3?CljWrgF$BU;K7NI!LX>=tiUpa8H7GSb99Z9c>{e5 zscNva^l}#7D>+(92oV_!i`TSTYuS@zVFh~LH!iv3_-xKxm?o@$wLK;Ko~iDfQz6Pw zhr^7$p~33u?e$g1LEtf*R=YAYOp_e8fVSdh^F;HHVudK9#A5LqrP7g%-d^9XcuD~4 z%#kdy+-ZKf!={vMRYfAqOjFa8t-ITkkYNU})I(cwvw8N_KAuvtb&tj3H)dqqkal-_ eN)jaj0Dl4OJf~SUkqJ%!0000X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x0Y^zhK~zYI?bbg_TTvLm;pgP9UIRkV#cG985GMyGajb(7ousqQeuP5D zE)IT!?nReQf>Y;q(M7vC2t^`DqNqtoygCG{y=|A0D3tr#&f$goz~Nj@7~8OQ%UjP_ zU_0}ifXDS5Qo5${gV}RlTzB_E%tDRP*27$c*D;G7hGV&0uOWHNT(Q=s+2X87waD@S zn^#QTGTEZkV7kO{;AD ze4b#p!&IH=CY4LhI}8qTIK=yiqilCRpf8a78aehy*hi=`68Kc+H2QtEuaL(dsg*g% zaQ2t$@g$J;4LkRMn2^yukA6bleTh`Q7k;i!hGO#v7r)GWSY`d?!}?p+-2eMS``1!P wvJ{dmg(OQM$x=wN6q4*o-XqDkNBG0Y9ZoJt9ui`SMF0Q*07*qoM6N<$g0JDc$N&HU literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json new file mode 100644 index 00000000..6af8e8a4 --- /dev/null +++ b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/Contents.json @@ -0,0 +1,17 @@ +{ + "images" : [ + { + "idiom" : "mac", + "scale" : "1x" + }, + { + "filename" : "zw@2x.png", + "idiom" : "mac", + "scale" : "2x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png b/Passepartout/Mac/Flags.xcassets/flags/zw.imageset/zw@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1029f472b7a93afa641688bd14b11dbc42507133 GIT binary patch literal 934 zcmV;X16lluP)X1^@s6RQmj^00006VoOIv0RI60 z0RN!9r;`8x16xT%K~zYI#g$!1n^zcspYO}3OB16tRi{;i4s3-o2VuJPLJZy5RXe>I ztwk?_rKTzDqEJZ_I$`}`zg;?oQFgToC79Z{ZZbNG#EcE04U1#aveKbzt($30<7`aK z&)J1bFl)M-B>KR)IDg;wob#S@Udh^TU2%TxRL|_10Uevgu-sy3QKlxQ=q&1ldz&VL zjEpEPE#>miWiFX6p`Fx1Y~w`~6+%u`y1Tn+ZfWN5k%R1PouaC4V3N^X51t3q%h@{AYBispcd%oRn*%5HJbqGG5rC{B04q0d z@^*U%=P&v(eb|cES6C56j*)fa7fzj`+TozCv5~8zs1qxEYcm=d_WQZGZy(q5C;}jTJK_?1x7RV((?fiI9)QR@OVqrTAn-9Lzm@+xQbKRB zP}$!PDiwnR0}S`|(HV_WoTEg^%S3QraS0)Whz9~i`)1$={=+Y%`nL zam+LAJm43(GaoJ6?E+Ip$<4$;Kb0h%%0k5A%tl3`ISpWb407*qo IM6N<$g54p;UjP6A literal 0 HcmV?d00001 diff --git a/Passepartout/Mac/Info.plist b/Passepartout/Mac/Info.plist new file mode 100644 index 00000000..34a290cc --- /dev/null +++ b/Passepartout/Mac/Info.plist @@ -0,0 +1,19 @@ + + + + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleShortVersionString + 2.0.0 + CFBundleVersion + 3240 + NSPrincipalClass + $(PRODUCT_MODULE_NAME).PassepartoutMac + com.algoritmico.Passepartout.config + + launcher_id + $(CFG_LAUNCHER_ID) + + + diff --git a/Passepartout/Mac/Mac/DefaultMacMenu.swift b/Passepartout/Mac/Mac/DefaultMacMenu.swift new file mode 100644 index 00000000..150a294a --- /dev/null +++ b/Passepartout/Mac/Mac/DefaultMacMenu.swift @@ -0,0 +1,41 @@ +// +// DefaultMacMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +class DefaultMacMenu: MacMenu { + weak var delegate: MacMenuDelegate? + + private lazy var menu: PassepartoutMenu = { + guard let delegate = delegate else { + fatalError("Must set MacMenu.delegate") + } + return PassepartoutMenu(macMenuDelegate: delegate) + }() + + func install() { + menu.install() + } +} diff --git a/Passepartout/Mac/Mac/DefaultMacUtils.swift b/Passepartout/Mac/Mac/DefaultMacUtils.swift new file mode 100644 index 00000000..71c92fdb --- /dev/null +++ b/Passepartout/Mac/Mac/DefaultMacUtils.swift @@ -0,0 +1,46 @@ +// +// DefaultMacUtils.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +class DefaultMacUtils: MacUtils { + private let transformer = ObservableProcessTransformer.shared + + var isForeground: Bool { + transformer.isForeground + } + + func toggleForeground() { + transformer.toggleForeground() + } + + func bringAppToForeground() { + transformer.bringToForeground() + } + + func sendAppToBackground() { + transformer.sendToBackground() + } +} diff --git a/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift b/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift new file mode 100644 index 00000000..b004cc6b --- /dev/null +++ b/Passepartout/Mac/Menu/HostProfileItem+ViewModel.swift @@ -0,0 +1,43 @@ +// +// HostProfileItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension HostProfileItem { + class ViewModel { + let profile: LightProfile + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, vpnManager: LightVPNManager) { + self.profile = profile + self.vpnManager = vpnManager + } + + @objc func connectTo() { + vpnManager.connect(with: profile.id) + } + } +} diff --git a/Passepartout/Mac/Menu/HostProfileItem.swift b/Passepartout/Mac/Menu/HostProfileItem.swift new file mode 100644 index 00000000..2e5c5599 --- /dev/null +++ b/Passepartout/Mac/Menu/HostProfileItem.swift @@ -0,0 +1,62 @@ +// +// HostProfileItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct HostProfileItem: Item { + private let viewModel: ViewModel + + init(_ profile: LightProfile, vpnManager: LightVPNManager) { + viewModel = ViewModel(profile, vpnManager: vpnManager) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.profile.name, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.profile.isActive ? .on : .off + item.submenu = submenu() + item.representedObject = viewModel + return item + } + + private func submenu() -> NSMenu { + let menu = NSMenu() + + let item = NSMenuItem( + title: L10n.Global.Strings.connect, + action: #selector(viewModel.connectTo), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + menu.addItem(item) + return menu + } +} diff --git a/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift b/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift new file mode 100644 index 00000000..578d6390 --- /dev/null +++ b/Passepartout/Mac/Menu/LaunchOnLoginItem+ViewModel.swift @@ -0,0 +1,77 @@ +// +// LaunchOnLoginItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import Combine +import ServiceManagement + +extension LaunchOnLoginItem { + class ViewModel: ObservableObject { + + // XXX: hardcoded from AppPreference + private let launchesOnLoginKey = "Passepartout.App.launchesOnLogin" + + let title: String + + var launchesOnLogin: Bool { + get { + persistentlyLaunchesOnLogin + } + set { + guard SMLoginItemSetEnabled(Constants.Mac.appLauncherId as CFString, newValue) else { + return + } + persistentlyLaunchesOnLogin = newValue + objectWillChange.send() + } + } + + private var persistentlyLaunchesOnLogin: Bool { + get { + UserDefaults.standard.bool(forKey: launchesOnLoginKey) + } + set { + UserDefaults.standard.set(newValue, forKey: launchesOnLoginKey) + } + } + + private var subscriptions: Set = [] + + init(title: String) { + self.title = title + } + + @objc func toggleLaunchesOnLogin() { + launchesOnLogin.toggle() + } + + func subscribe(_ block: @escaping (Bool) -> Void) { + objectWillChange + .sink { + block(self.launchesOnLogin) + }.store(in: &subscriptions) + } + } +} diff --git a/Passepartout/Mac/Menu/LaunchOnLoginItem.swift b/Passepartout/Mac/Menu/LaunchOnLoginItem.swift new file mode 100644 index 00000000..aa3993a7 --- /dev/null +++ b/Passepartout/Mac/Menu/LaunchOnLoginItem.swift @@ -0,0 +1,55 @@ +// +// LaunchOnLoginItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct LaunchOnLoginItem: Item { + private let viewModel: ViewModel + + init(_ title: String) { + viewModel = ViewModel(title: title) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title, + action: #selector(viewModel.toggleLaunchesOnLogin), + keyEquivalent: "" + ) + item.target = viewModel + item.state = state + item.representedObject = viewModel + + viewModel.subscribe { _ in + item.state = state + } + return item + } + + private var state: NSControl.StateValue { + viewModel.launchesOnLogin ? .on : .off + } +} diff --git a/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift b/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift new file mode 100644 index 00000000..cbe2c6ef --- /dev/null +++ b/Passepartout/Mac/Menu/PassepartoutMenu+StatusButton.swift @@ -0,0 +1,87 @@ +// +// PassepartoutMenu+StatusButton.swift +// Passepartout +// +// Created by Davide De Rosa on 7/5/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +extension PassepartoutMenu { + class StatusButton { + private lazy var statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) + + private lazy var statusButton: NSStatusBarButton = { + guard let statusButton = statusItem.button else { + fatalError("Missing status item button?") + } + return statusButton + }() + + private let profileManager: LightProfileManager + + private let vpnManager: LightVPNManager + + init(profileManager: LightProfileManager, vpnManager: LightVPNManager) { + self.profileManager = profileManager + self.vpnManager = vpnManager + + vpnManager.delegate = self + setStatus(vpnManager.vpnStatus) + } + + func install(systemMenu: SystemMenu) { + statusItem.menu = systemMenu.asMenu + } + } +} + +extension PassepartoutMenu.StatusButton: LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) { + guard isEnabled else { + setStatus(.disconnected) + return + } + setStatus(vpnStatus) + } + + private func setStatus(_ vpnStatus: LightVPNStatus) { + statusButton.setStatus(vpnStatus, withActiveProfileName: profileManager.activeProfileName) + } +} + +private extension NSStatusBarButton { + func setStatus(_ vpnStatus: LightVPNStatus, withActiveProfileName activeProfileName: String?) { + image = vpnStatus.image + alphaValue = vpnStatus.imageAlpha + + guard let activeProfileName = activeProfileName else { + toolTip = nil + return + } + toolTip = [ + Constants.Global.appName, + activeProfileName, + vpnStatus.localizedDescription + ].joined(separator: "\n") + } +} diff --git a/Passepartout/Mac/Menu/PassepartoutMenu.swift b/Passepartout/Mac/Menu/PassepartoutMenu.swift new file mode 100644 index 00000000..4e02f750 --- /dev/null +++ b/Passepartout/Mac/Menu/PassepartoutMenu.swift @@ -0,0 +1,117 @@ +// +// PassepartoutMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +class PassepartoutMenu { + private let macMenuDelegate: MacMenuDelegate + + private let profileManager: LightProfileManager + + private let providerManager: LightProviderManager + + private let statusButton: StatusButton + + init(macMenuDelegate: MacMenuDelegate) { + self.macMenuDelegate = macMenuDelegate + profileManager = macMenuDelegate.profileManager + providerManager = macMenuDelegate.providerManager + statusButton = StatusButton( + profileManager: profileManager, + vpnManager: macMenuDelegate.vpnManager + ) + + profileManager.delegate = self + providerManager.delegate = self + + } + + func install() { + statusButton.install(systemMenu: StaticSystemMenu(body)) + } + + private var body: [ItemGroup] { + var children: [ItemGroup] = [] + + children.append(contentsOf: [ + VisibilityItem { + $0 ? L10n.Global.Strings.hide : L10n.Global.Strings.show + }, + LaunchOnLoginItem(L10n.Preferences.Items.LaunchesOnLogin.caption), + ] as [ItemGroup]) + + if profileManager.hasProfiles { + children.append(contentsOf: [ + SeparatorItem(), + ProfileItemGroup( + profileManager: macMenuDelegate.profileManager, + providerManager: macMenuDelegate.providerManager, + vpnManager: macMenuDelegate.vpnManager + ) + ] as [ItemGroup]) + } + + if let _ = profileManager.activeProfileId { + children.append(contentsOf: [ + SeparatorItem(), + VPNItemGroup( + vpnManager: macMenuDelegate.vpnManager + ) { + $0 ? L10n.Profile.Items.Vpn.TurnOff.caption : L10n.Profile.Items.Vpn.TurnOn.caption + } reconnectTitleBlock: { + L10n.Global.Strings.reconnect + }, + ] as [ItemGroup]) + } + + children.append(contentsOf: [ + SeparatorItem(), +// TextItem(L10n.Menu.All.About.title(Constants.Global.appName)) { +// +// // this does not work when app is in background +// NSApp.orderFrontStandardAboutPanel(nil) +// NSApp.activate(ignoringOtherApps: true) +// }, + TextItem(L10n.Menu.System.Quit.title(Constants.Global.appName), key: "q") { + NSApp.terminate(nil) + } + ] as [ItemGroup]) + + return children + } +} + +extension PassepartoutMenu: LightProfileManagerDelegate { + func didUpdateProfiles() { + install() + } +} + +extension PassepartoutMenu: LightProviderManagerDelegate { + func didUpdateProviders() { + install() + } +} diff --git a/Passepartout/Mac/Menu/ProfileItemGroup.swift b/Passepartout/Mac/Menu/ProfileItemGroup.swift new file mode 100644 index 00000000..0981304b --- /dev/null +++ b/Passepartout/Mac/Menu/ProfileItemGroup.swift @@ -0,0 +1,61 @@ +// +// ProfileItemGroup.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProfileItemGroup: ItemGroup { + private let profileManager: LightProfileManager + + private let providerManager: LightProviderManager + + private let vpnManager: LightVPNManager + + init(profileManager: LightProfileManager, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + self.profileManager = profileManager + self.providerManager = providerManager + self.vpnManager = vpnManager + } + + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + profileManager.profiles.map { + if $0.isProvider { + return providerItem(withProfile: $0, parent: parent) + } else { + return hostItem(withProfile: $0, parent: parent) + } + } + } + + private func hostItem(withProfile profile: LightProfile, parent: NSMenu) -> NSMenuItem { + HostProfileItem(profile, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } + + private func providerItem(withProfile profile: LightProfile, parent: NSMenu) -> NSMenuItem { + ProviderProfileItem(profile, providerManager: providerManager, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift new file mode 100644 index 00000000..7fd97be5 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderLocationItem+ViewModel.swift @@ -0,0 +1,57 @@ +// +// ProviderLocationItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension ProviderLocationItem { + class ViewModel { + private let profile: LightProfile + + let location: LightProviderLocation + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ location: LightProviderLocation, vpnManager: LightVPNManager) { + self.profile = profile + self.location = location + self.vpnManager = vpnManager + } + + var isActiveLocation: Bool { + return location.id == profile.providerServer?.locationId + } + + var isOnlyServer: Bool { + location.servers.count == 1 + } + + @objc func connectTo() { + guard isOnlyServer else { + fatalError("Connecting to a location with multiple servers?") + } + vpnManager.connect(with: profile.id, to: location.servers.first!.serverId) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderLocationItem.swift b/Passepartout/Mac/Menu/ProviderLocationItem.swift new file mode 100644 index 00000000..1af1b4fe --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderLocationItem.swift @@ -0,0 +1,71 @@ +// +// ProviderLocationItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/12/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderLocationItem: Item { + private let profile: LightProfile + + private let location: LightProviderLocation + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ location: LightProviderLocation, vpnManager: LightVPNManager) { + self.profile = profile + self.location = location + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let viewModel = ViewModel(profile, location, vpnManager: vpnManager) + let item = NSMenuItem( + title: viewModel.location.description, + action: nil, + keyEquivalent: "" + ) + item.image = viewModel.location.nsImage + item.state = viewModel.isActiveLocation ? .on : .off + item.representedObject = viewModel + + if viewModel.isOnlyServer { + item.target = viewModel + item.action = #selector(viewModel.connectTo) + } else { + let submenu = NSMenu() + location.servers.forEach { + submenu.addItem(serverItem(with: $0, parent: submenu)) + } + item.submenu = submenu + } + + return item + } + + private func serverItem(with server: LightProviderServer, parent: NSMenu) -> NSMenuItem { + ProviderServerItem(profile, server, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift new file mode 100644 index 00000000..0c2a29a0 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderProfileItem+ViewModel.swift @@ -0,0 +1,65 @@ +// +// ProviderProfileItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/13/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension ProviderProfileItem { + class ViewModel { + let profile: LightProfile + + private let providerManager: LightProviderManager + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + self.profile = profile + self.providerManager = providerManager + self.vpnManager = vpnManager + } + + private var providerName: String { + guard let providerName = profile.providerName else { + fatalError("ProviderProfileItem but profile is not a provider") + } + return providerName + } + + private var vpnProtocol: String { + profile.vpnProtocol + } + + var categories: [LightProviderCategory] { + providerManager.categories(providerName, vpnProtocol: vpnProtocol) + } + + func isActiveCategory(_ category: LightProviderCategory) -> Bool { + return category.name == profile.providerServer?.categoryName + } + + func downloadIfNeeded() { + providerManager.downloadIfNeeded(providerName, vpnProtocol: vpnProtocol) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderProfileItem.swift b/Passepartout/Mac/Menu/ProviderProfileItem.swift new file mode 100644 index 00000000..1fc4ef4c --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderProfileItem.swift @@ -0,0 +1,95 @@ +// +// ProviderProfileItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/13/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderProfileItem: Item { + private let viewModel: ViewModel + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, providerManager: LightProviderManager, vpnManager: LightVPNManager) { + viewModel = ViewModel(profile, providerManager: providerManager, vpnManager: vpnManager) + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.profile.name, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.profile.isActive ? .on : .off + item.representedObject = viewModel + item.submenu = submenu() + return item + } + + private func submenu() -> NSMenu { + let menu = NSMenu() + let categories = viewModel.categories + if categories.isEmpty { + let downloadItem = TextItem(L10n.Global.Strings.download) { + viewModel.downloadIfNeeded() + } + menu.addItem(downloadItem.asMenuItem(withParent: menu)) + } else if categories.count > 1 { + viewModel.categories.forEach { + menu.addItem(categoryItem(with: $0, parent: menu)) + } + } else { + viewModel.categories.first?.locations.forEach { + menu.addItem(locationItem(with: $0, parent: menu)) + } + } + return menu + } + + private func categoryItem(with category: LightProviderCategory, parent: NSMenu) -> NSMenuItem { + let title = !category.name.isEmpty ? category.name.capitalized : L10n.Global.Strings.default + let item = NSMenuItem( + title: title, + action: nil, + keyEquivalent: "" + ) + item.state = viewModel.isActiveCategory(category) ? .on : .off + item.target = viewModel + item.representedObject = viewModel + + let submenu = NSMenu() + category.locations.forEach { + submenu.addItem(locationItem(with: $0, parent: submenu)) + } + item.submenu = submenu + + return item + } + + private func locationItem(with location: LightProviderLocation, parent: NSMenu) -> NSMenuItem { + ProviderLocationItem(viewModel.profile, location, vpnManager: vpnManager) + .asMenuItem(withParent: parent) + } +} diff --git a/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift b/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift new file mode 100644 index 00000000..f0c64a91 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderServerItem+ViewModel.swift @@ -0,0 +1,50 @@ +// +// ProviderServerItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension ProviderServerItem { + class ViewModel { + private let profile: LightProfile + + let server: LightProviderServer + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ server: LightProviderServer, vpnManager: LightVPNManager) { + self.profile = profile + self.server = server + self.vpnManager = vpnManager + } + + var isActiveServer: Bool { + server.serverId == profile.providerServer?.serverId + } + + @objc func connectTo() { + vpnManager.connect(with: profile.id, to: server.serverId) + } + } +} diff --git a/Passepartout/Mac/Menu/ProviderServerItem.swift b/Passepartout/Mac/Menu/ProviderServerItem.swift new file mode 100644 index 00000000..4131ed00 --- /dev/null +++ b/Passepartout/Mac/Menu/ProviderServerItem.swift @@ -0,0 +1,54 @@ +// +// ProviderServerItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/8/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct ProviderServerItem: Item { + private let profile: LightProfile + + private let server: LightProviderServer + + private let vpnManager: LightVPNManager + + init(_ profile: LightProfile, _ server: LightProviderServer, vpnManager: LightVPNManager) { + self.profile = profile + self.server = server + self.vpnManager = vpnManager + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let viewModel = ViewModel(profile, server, vpnManager: vpnManager) + let item = NSMenuItem( + title: viewModel.server.description, + action: #selector(viewModel.connectTo), + keyEquivalent: "" + ) + item.target = viewModel + item.state = viewModel.isActiveServer ? .on : .off + item.representedObject = viewModel + return item + } +} diff --git a/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift b/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift new file mode 100644 index 00000000..87fc0f24 --- /dev/null +++ b/Passepartout/Mac/Menu/VPNItemGroup+ViewModel.swift @@ -0,0 +1,81 @@ +// +// VPNItemGroup+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import Combine + +extension VPNItemGroup { + class ViewModel { + private let vpnManager: LightVPNManager + + private let toggleTitleBlock: (Bool) -> String + + private let reconnectTitleBlock: () -> String + + private var didUpdateState: [(Bool, LightVPNStatus) -> Void] = [] + + private var subscriptions: Set = [] + + init( + vpnManager: LightVPNManager, + toggleTitleBlock: @escaping (Bool) -> String, + reconnectTitleBlock: @escaping () -> String + ) { + self.vpnManager = vpnManager + self.toggleTitleBlock = toggleTitleBlock + self.reconnectTitleBlock = reconnectTitleBlock + + vpnManager.delegate = self + } + + var toggleTitle: String { + toggleTitleBlock(vpnManager.isEnabled) + } + + var reconnectTitle: String { + reconnectTitleBlock() + } + + @objc func toggleVPN() { + vpnManager.toggle() + } + + @objc func reconnectVPN() { + vpnManager.reconnect() + } + + func subscribeVPNState(_ block: @escaping (Bool, LightVPNStatus) -> Void) { + didUpdateState.append(block) + } + } +} + +extension VPNItemGroup.ViewModel: LightVPNManagerDelegate { + func didUpdateState(isEnabled: Bool, vpnStatus: LightVPNStatus) { + didUpdateState.forEach { + $0(isEnabled, vpnStatus) + } + } +} diff --git a/Passepartout/Mac/Menu/VPNItemGroup.swift b/Passepartout/Mac/Menu/VPNItemGroup.swift new file mode 100644 index 00000000..0f8a8655 --- /dev/null +++ b/Passepartout/Mac/Menu/VPNItemGroup.swift @@ -0,0 +1,76 @@ +// +// VPNToggleItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct VPNItemGroup: ItemGroup { + private let viewModel: ViewModel + + init( + vpnManager: LightVPNManager, + toggleTitleBlock: @escaping (Bool) -> String, + reconnectTitleBlock: @escaping () -> String + ) { + viewModel = ViewModel( + vpnManager: vpnManager, + toggleTitleBlock: toggleTitleBlock, + reconnectTitleBlock: reconnectTitleBlock + ) + } + + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + [ + toggleItem(withParent: parent), + reconnectItem(withParent: parent) + ] + } + + private func toggleItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.toggleTitle, + action: #selector(viewModel.toggleVPN), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + viewModel.subscribeVPNState { _, _ in + item.title = viewModel.toggleTitle + } + return item + } + + private func reconnectItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.reconnectTitle, + action: #selector(viewModel.reconnectVPN), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + return item + } +} diff --git a/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift b/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift new file mode 100644 index 00000000..d3995eac --- /dev/null +++ b/Passepartout/Mac/Menu/VisibilityItem+ViewModel.swift @@ -0,0 +1,50 @@ +// +// VisibilityItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +extension VisibilityItem { + class ViewModel { + private let transformer = ObservableProcessTransformer.shared + + private let titleBlock: (Bool) -> String + + init(titleBlock: @escaping (Bool) -> String) { + self.titleBlock = titleBlock + } + + var title: String { + titleBlock(transformer.isForeground) + } + + @objc func toggleForeground() { + transformer.toggleForeground() + } + + func subscribe(_ block: @escaping () -> Void) { + transformer.subscribe(block) + } + } +} diff --git a/Passepartout/Mac/Menu/VisibilityItem.swift b/Passepartout/Mac/Menu/VisibilityItem.swift new file mode 100644 index 00000000..938da674 --- /dev/null +++ b/Passepartout/Mac/Menu/VisibilityItem.swift @@ -0,0 +1,50 @@ +// +// VisibilityItem.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct VisibilityItem: Item { + private let viewModel: ViewModel + + init(_ titleBlock: @escaping (Bool) -> String) { + viewModel = ViewModel(titleBlock: titleBlock) + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title, + action: #selector(viewModel.toggleForeground), + keyEquivalent: "" + ) + item.target = viewModel + item.representedObject = viewModel + + viewModel.subscribe { + item.title = viewModel.title + } + return item + } +} diff --git a/Passepartout/Mac/PassepartoutMac.swift b/Passepartout/Mac/PassepartoutMac.swift new file mode 100644 index 00000000..06bd9d93 --- /dev/null +++ b/Passepartout/Mac/PassepartoutMac.swift @@ -0,0 +1,36 @@ +// +// PassepartoutMac.swift +// Passepartout +// +// Created by Davide De Rosa on 6/19/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation + +class PassepartoutMac: NSObject, MacBridge { + required override init() { + super.init() + } + + let utils: MacUtils = DefaultMacUtils() + + let menu: MacMenu = DefaultMacMenu() +} diff --git a/Passepartout/Mac/Reusable/Item.swift b/Passepartout/Mac/Reusable/Item.swift new file mode 100644 index 00000000..56439411 --- /dev/null +++ b/Passepartout/Mac/Reusable/Item.swift @@ -0,0 +1,37 @@ +// +// Item.swift +// Passepartout +// +// Created by Davide De Rosa on 6/28/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol Item: ItemGroup { + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem +} + +extension Item { + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] { + [asMenuItem(withParent: parent)] + } +} diff --git a/Passepartout/Mac/Reusable/ItemGroup.swift b/Passepartout/Mac/Reusable/ItemGroup.swift new file mode 100644 index 00000000..61b7e224 --- /dev/null +++ b/Passepartout/Mac/Reusable/ItemGroup.swift @@ -0,0 +1,31 @@ +// +// ItemGroup.swift +// Passepartout +// +// Created by Davide De Rosa on 7/4/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol ItemGroup { + func asMenuItems(withParent parent: NSMenu) -> [NSMenuItem] +} diff --git a/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift b/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift new file mode 100644 index 00000000..07b1a455 --- /dev/null +++ b/Passepartout/Mac/Reusable/ObservableProcessTransformer.swift @@ -0,0 +1,69 @@ +// +// ObservableProcessTransformer.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import Combine + +class ObservableProcessTransformer: ObservableObject { + static let shared = ObservableProcessTransformer() + + private let transformer = ProcessTransformer() + + private var subscriptions: Set = [] + + private init() { + } + + var isForeground: Bool { + transformer.isForeground + } + + func toggleForeground() { + guard transformer.toggleForeground() else { + return + } + objectWillChange.send() + } + + func bringToForeground() { + guard transformer.bringToForeground() else { + return + } + objectWillChange.send() + } + + func sendToBackground() { + guard transformer.sendToBackground() else { + return + } + objectWillChange.send() + } + + func subscribe(_ block: @escaping () -> Void) { + objectWillChange + .sink(receiveValue: block) + .store(in: &subscriptions) + } +} diff --git a/Passepartout/Mac/Reusable/ProcessTransformer.h b/Passepartout/Mac/Reusable/ProcessTransformer.h new file mode 100644 index 00000000..37d4d79e --- /dev/null +++ b/Passepartout/Mac/Reusable/ProcessTransformer.h @@ -0,0 +1,40 @@ +// +// ProcessTransformer.h +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +#import + +NS_ASSUME_NONNULL_BEGIN + +@interface ProcessTransformer : NSObject + +@property (nonatomic, readonly) BOOL isForeground; + +- (BOOL)toggleForeground; +- (BOOL)bringToForeground; +- (BOOL)sendToBackground; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Passepartout/Mac/Reusable/ProcessTransformer.m b/Passepartout/Mac/Reusable/ProcessTransformer.m new file mode 100644 index 00000000..ee6d1ce8 --- /dev/null +++ b/Passepartout/Mac/Reusable/ProcessTransformer.m @@ -0,0 +1,96 @@ +// +// ProcessTransformer.m +// Passepartout +// +// Created by Davide De Rosa on 6/25/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +#import "ProcessTransformer.h" + +@import AppKit; +@import ApplicationServices; +//@import Carbon; + +// https://stackoverflow.com/a/22242797/784615 + +@interface ProcessTransformer () + +@property (nonatomic) BOOL isForeground; + +- (BOOL)tranformAppToState:(ProcessApplicationTransformState)newState; + +@end + +@implementation ProcessTransformer + +- (instancetype)init +{ + if ((self = [super init])) { + self.isForeground = YES; + } + return self; +} + +- (BOOL)toggleForeground +{ + if (self.isForeground) { + return [self sendToBackground]; + } else { + return [self bringToForeground]; + } +} + +- (BOOL)bringToForeground +{ + if (![self tranformAppToState:kProcessTransformToForegroundApplication]) { + return NO; + } +// if (SetSystemUIMode(kUIModeNormal, 0) != 0) { +// return NO; +// } + [NSApp activateIgnoringOtherApps:YES]; + self.isForeground = YES; + return YES; +} + +- (BOOL)sendToBackground +{ + if (![self tranformAppToState:kProcessTransformToBackgroundApplication]) { + return NO; + } + self.isForeground = NO; + return YES; +} + +- (BOOL)tranformAppToState:(ProcessApplicationTransformState)newState +{ + ProcessSerialNumber psn = { 0, kCurrentProcess }; + OSStatus transformStatus = TransformProcessType(&psn, newState); + + if ((transformStatus != 0)) { + NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:transformStatus userInfo:nil]; + NSLog(@"tranformAppToState: Unable to transform app state: %@", error); + } + + return (transformStatus == 0); +} + +@end diff --git a/Passepartout/Mac/Reusable/SeparatorItem.swift b/Passepartout/Mac/Reusable/SeparatorItem.swift new file mode 100644 index 00000000..9a790a73 --- /dev/null +++ b/Passepartout/Mac/Reusable/SeparatorItem.swift @@ -0,0 +1,33 @@ +// +// SeparatorItem.swift +// Passepartout +// +// Created by Davide De Rosa on 6/29/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct SeparatorItem: Item { + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + .separator() + } +} diff --git a/Passepartout/Mac/Reusable/StaticSystemMenu.swift b/Passepartout/Mac/Reusable/StaticSystemMenu.swift new file mode 100644 index 00000000..6b435d74 --- /dev/null +++ b/Passepartout/Mac/Reusable/StaticSystemMenu.swift @@ -0,0 +1,47 @@ +// +// StaticSystemMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/3/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct StaticSystemMenu: SystemMenu { + let children: [ItemGroup] + + init(_ children: [ItemGroup]) { + self.children = children + } + + var asMenu: NSMenu { + let menu = NSMenu() + if !children.isEmpty { + children.forEach { + $0.asMenuItems(withParent: menu).forEach { + menu.addItem($0) + } + } + } + return menu + } +} diff --git a/Passepartout/Mac/Reusable/SystemMenu.swift b/Passepartout/Mac/Reusable/SystemMenu.swift new file mode 100644 index 00000000..51c1b755 --- /dev/null +++ b/Passepartout/Mac/Reusable/SystemMenu.swift @@ -0,0 +1,31 @@ +// +// SystemMenu.swift +// Passepartout +// +// Created by Davide De Rosa on 7/2/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +protocol SystemMenu { + var asMenu: NSMenu { get } +} diff --git a/Passepartout/Mac/Reusable/TextItem+ViewModel.swift b/Passepartout/Mac/Reusable/TextItem+ViewModel.swift new file mode 100644 index 00000000..70308dd6 --- /dev/null +++ b/Passepartout/Mac/Reusable/TextItem+ViewModel.swift @@ -0,0 +1,67 @@ +// +// TextItem+ViewModel.swift +// Passepartout +// +// Created by Davide De Rosa on 7/2/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import Combine + +extension TextItem { + class ViewModel { + let title: CurrentValueSubject + + let state: CurrentValueSubject + + private let action: (() -> Void)? + + var hasAction: Bool { + action != nil + } + + private var subscriptions: Set = [] + + init(_ title: String, state: State = .none, action: (() -> Void)? = nil) { + self.title = CurrentValueSubject(title) + self.state = CurrentValueSubject(state) + self.action = action + } + + @objc func representedAction() { + action?() + } + + func subscribeTitle(_ block: @escaping (String) -> Void) { + title + .removeDuplicates() + .sink(receiveValue: block) + .store(in: &subscriptions) + } + + func subscribeState(_ block: @escaping (State) -> Void) { + state + .removeDuplicates() + .sink(receiveValue: block) + .store(in: &subscriptions) + } + } +} diff --git a/Passepartout/Mac/Reusable/TextItem.swift b/Passepartout/Mac/Reusable/TextItem.swift new file mode 100644 index 00000000..e672dc3c --- /dev/null +++ b/Passepartout/Mac/Reusable/TextItem.swift @@ -0,0 +1,93 @@ +// +// TextItem.swift +// Passepartout +// +// Created by Davide De Rosa on 6/28/22. +// Copyright (c) 2022 Davide De Rosa. All rights reserved. +// +// https://github.com/passepartoutvpn +// +// This file is part of Passepartout. +// +// Passepartout 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. +// +// Passepartout 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 Passepartout. If not, see . +// + +import Foundation +import AppKit + +struct TextItem: Item { + enum State { + case none + + case checked + + case unchecked + } + + private let viewModel: ViewModel + + private let key: String? + + let children: [Item] + + init(_ title: String, state: State = .none, key: String? = nil, _ children: [Item] = [], action: (() -> Void)? = nil) { + self.init(ViewModel(title, state: state, action: action), key: key, children) + } + + init(_ viewModel: ViewModel, key: String? = nil, _ children: [Item] = []) { + self.viewModel = viewModel + self.key = key + self.children = children + } + + func asMenuItem(withParent parent: NSMenu) -> NSMenuItem { + let item = NSMenuItem( + title: viewModel.title.value, + action: viewModel.hasAction ? #selector(viewModel.representedAction) : nil, + keyEquivalent: key ?? "" + ) + if viewModel.hasAction { + item.target = viewModel + } + item.state = state + item.representedObject = viewModel + + if !children.isEmpty { + let submenu = NSMenu() + children.forEach { + submenu.addItem($0.asMenuItem(withParent: submenu)) + } + item.submenu = submenu + } + + viewModel.subscribeTitle { + item.title = $0 + } + viewModel.subscribeState { _ in + item.state = state + } + + return item + } + + private var state: NSControl.StateValue { + switch viewModel.state.value { + case .none, .unchecked: + return .off + + case .checked: + return .on + } + } +} diff --git a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift index 599fb27e..c5da8c04 100644 --- a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/VPNManager.swift @@ -37,7 +37,7 @@ public protocol VPNManager { var masksPrivateData: Bool { get set } - func connectWithActiveProfile() async throws + func connectWithActiveProfile(toServer newServerId: String?) async throws @discardableResult func connect(with profileId: UUID) async throws -> Profile @@ -47,8 +47,6 @@ public protocol VPNManager { func modifyActiveProfile(_ block: (inout Profile) -> Void) async throws - func toggle() -> Bool - func disable() async func uninstall() async diff --git a/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift b/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift index 6e1aec25..8955b159 100644 --- a/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift +++ b/PassepartoutLibrary/Sources/PassepartoutCore/Models/ProviderLocation.swift @@ -34,13 +34,20 @@ public struct ProviderLocation { public let countryCode: String - public let onlyServer: ProviderServer? + public var onlyServer: ProviderServer? { + guard servers?.count == 1 else { + return nil + } + return servers?.first + } - public init(providerMetadata: ProviderMetadata, vpnProtocol: VPNProtocolType, categoryName: String, countryCode: String, onlyServer: ProviderServer?) { + public let servers: [ProviderServer]? + + public init(providerMetadata: ProviderMetadata, vpnProtocol: VPNProtocolType, categoryName: String, countryCode: String, servers: [ProviderServer]?) { self.providerMetadata = providerMetadata self.vpnProtocol = vpnProtocol self.categoryName = categoryName self.countryCode = countryCode - self.onlyServer = onlyServer + self.servers = servers } } diff --git a/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift b/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift index 85cde36b..d88c7d85 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProviders/Repositories/LocationMapper.swift @@ -62,17 +62,22 @@ struct LocationMapper: DTOMapper, ModelMapper { return nil } - var server: ProviderServer? - if dto.servers?.count == 1, let serverDTO = dto.servers?.anyObject() as? CDInfrastructureServer { - server = ServerMapper.toModel(serverDTO) - } +// var server: ProviderServer? +// if dto.servers?.count == 1, let serverDTO = dto.servers?.anyObject() as? CDInfrastructureServer { +// server = ServerMapper.toModel(serverDTO) +// } + let servers = (dto.servers?.allObjects as? [CDInfrastructureServer])? + .compactMap(ServerMapper.toModel) return ProviderLocation( providerMetadata: providerMetadata, vpnProtocol: vpnProtocol, categoryName: categoryName, countryCode: countryCode, - onlyServer: server +// servers: server.map { +// [$0] +// } + servers: servers ) } } diff --git a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift index dc0710df..87374e35 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager+Actions.swift @@ -32,7 +32,7 @@ import PassepartoutUtils // ProfileManager.activateProfile() extension DefaultVPNManager { - public func connectWithActiveProfile() async throws { + public func connectWithActiveProfile(toServer newServerId: String?) async throws { guard currentState.vpnStatus != .connected else { pp_log.warning("VPN is already connected") return @@ -41,7 +41,11 @@ extension DefaultVPNManager { pp_log.warning("No active profile") return } - try await connect(with: profileId) + if let newServerId = newServerId { + try await connect(with: profileId, toServer: newServerId) + } else { + try await connect(with: profileId) + } } @discardableResult @@ -86,7 +90,7 @@ extension DefaultVPNManager { guard !profileManager.isActiveProfile(profileId) || currentState.vpnStatus != .connected || oldServerId != newServer.id else { - + pp_log.info("Profile \(profile.logDescription) is already active and connected to: \(newServer.logDescription)") return profile } diff --git a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift index e21a18b4..4207c44c 100644 --- a/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutVPN/Managers/DefaultVPNManager.swift @@ -90,22 +90,6 @@ public class DefaultVPNManager Bool { - guard let configuration = vpnConfigurationWithCurrentProfile() else { - return false - } - Task { - pp_log.info("Toggling VPN (enabled: \(currentState.isEnabled) -> \(!currentState.isEnabled))") - clearLastError() - if !currentState.isEnabled { - await strategy.connect(configuration: configuration) - } else { - await strategy.disconnect() - } - } - return true - } - func reinstate(_ configuration: VPNConfiguration) async { pp_log.info("Reinstating VPN") clearLastError() diff --git a/swiftgen.yml b/swiftgen.yml new file mode 100644 index 00000000..530a0010 --- /dev/null +++ b/swiftgen.yml @@ -0,0 +1,15 @@ +strings: + inputs: + - Passepartout/AppShared/en.lproj/Localizable.strings + outputs: + - templateName: structured-swift4 + output: Passepartout/AppShared/Constants/SwiftGen+Strings.swift + +xcassets: + inputs: + - Passepartout/App/Assets.xcassets + - Passepartout/App/Flags.xcassets + - Passepartout/App/Providers.xcassets + outputs: + - templateName: swift4 + output: Passepartout/App/Constants/SwiftGen+Assets.swift