Hi Greg, Understand. I hope I will make some progress earlier on that.
Thanks, Piotr wt., 18 gru 2018 o 09:17 Greg Dove <[email protected]> napisał(a): > Hi Piotr, > > I would be happy to work on it, and wish I could, but the problem for me at > the moment is that I can't make it a priority, because for now at least it > is functioning as we need it, and there are plenty of things that are not > (mostly unrelated to Jewel). While the implementation as it stands might > not be 'right', it does function as we need it to for now. I suspect that > is what Carlos meant when he said he was concerned about regressions. > > I have other stuff queued up to add in other areas too, like AMFBinaryData > and AMFNetConnection but will need to do more work to generalize it, as I > have it these working in a way that is almost complete, but mostly focused > on what is sufficient for what Carlos needs for now. > > I hope to get some free time in early January to finish up these things. > > > > > On Tue, Dec 18, 2018 at 11:53 AM Piotr Zarzycki <[email protected] > > > wrote: > > > Hi Guys, > > > > I definitely need to a way of resolve that problem. I will review emails > > tomorrow. > > > > However if you Greg would like to try something go for it. Would be great > > if you could use my branch where changes which removes dispatching > "change" > > event from model are in place. > > > > Thanks, Piotr > > > > pon., 17 gru 2018 o 23:46 Alex Harui <[email protected]> > > napisał(a): > > > > > Hi Greg, > > > > > > I haven't looked at how pervasive this change would be. I'm mainly > > saying > > > that Flex worked with these categories of events and I think Royale can > > too > > > and would eliminate the need for DispatchChangeOnStartup and things > like > > > that. > > > > > > You could be right that the models only need to dispatch > selectionChange > > > and not "change", as long as the controllers are guaranteed to update > the > > > model in a way that fires selectionChange. I have this feeling that in > > > Flex there were some backdoors for updating properties without > > dispatching > > > events and dispatching the event "later", but I don't think we've had > to > > > write such code in Royale and maybe we won't have to or can't because > the > > > browser will update right away in many cases. There were somethings > you > > > could do in Flash knowing that all rendering was deferred to frame > > > updates. In Royale, with separate models, the controller code can't > just > > > set the backing variable. > > > > > > So, if you want to give it a try having only selectionChange as the > > > bindable event, go for it. > > > > > > -Alex > > > > > > On 12/17/18, 12:35 PM, "Greg Dove" <[email protected]> wrote: > > > > > > Thanks Alex. > > > > > > I only looked in Basic TextInput because I was looking for a > simpler > > > example of the general case being discussed. That code looks like > it > > > might > > > need some work on the swf side in any case. > > > I was just looking for the 'programmaticChange' vs > > > 'userInitiatedChange' > > > differences. > > > > > > Based on a quick look at the other Basic classes, the conclusions > > > appear > > > similar. They are bindable via 'change' only. > > > And the models all dispatch both selectedIndexChanged and > > > selectedItemChanged. > > > > > > So it seems like you are proposing broad changes for everything, if > > > they > > > are to also support binding changes for programmatic changes? > > > > > > For me, the change in something (or nothing) being 'selected' > > logically > > > occurs as a result of either user change or programmatic change. On > > > that > > > basis would it be possible to have the selectionChange as the sole > > > Binding > > > event (which occurs from setter induced change and from user > induced > > > change) and the 'change' event as user-interaction only as the > class > > > level > > > event type (as it is now)? > > > > > > I have not thought about this as much as you (Alex and others) > have, > > so > > > maybe that last suggestion does not make sense. But I really think > > > that for > > > whatever does make sense it would be great to settle on something > and > > > get > > > it consistent for all components asap. > > > > > > > > > > > > > > > On Tue, Dec 18, 2018 at 8:43 AM Alex Harui > <[email protected] > > > > > > wrote: > > > > > > > Hi Greg, > > > > > > > > You are correct that there is a pain point around binding > overhead > > > and > > > > PAYG. I can't think of a PAYG way of adding the ability to add > > more > > > > binding events via beads that doesn't have too much overhead for > > > folks not > > > > interested in those extra events. Actually, there are some ways > > > that are > > > > JS-only like replacing prototype-methods, but I don't think we > > > should rely > > > > on mutable class definitions. In many cases we make trade-offs > > and > > > Basic > > > > ends up being what we think almost all folks "must have". > > > > > > > > When we first started out I was hoping to reduce binding overhead > > > which is > > > > why some of the beads look like they do, but these days I think > it > > > is more > > > > important to separate interactive events from binding/setup > events. > > > Folks > > > > who don't use a particular binding event can always replace the > > > model and > > > > top-level component with a version without events they are not > > > interested > > > > in, or in the JS output, run a post-process to cull out metadata. > > > But > > > > under the "almost all folks" rule, I think "almost all folks" > don't > > > want to > > > > run interaction handling code at setup time. Especially if that > > > handling > > > > code runs any sort of animation or does any other heavy > processing. > > > > > > > > I could be wrong, but I'm pretty sure that if you just take a > > > <select> > > > > element, you can set its initial selection value without it > > > dispatching an > > > > event called "change". Then when a user selects an item you get > a > > > "change" > > > > event. IMO, this is why "change" should be an interactive event > > and > > > not a > > > > binding event. > > > > > > > > So these are the reasons I think we should adjust the basic beads > > to > > > > separate interactive events from setup events and why "change" is > > an > > > > interactive event. > > > > > > > > Now, we could renew the effort to make Basic the truly smallest > > > > implementation and move some of this logic to Express, but I keep > > > seeing > > > > code creep into Basic to handle situations that almost all folks > > > need. > > > > > > > > TextInput, on the other hand, has been an exception of sorts in > > > Flex. The > > > > Flash/AIR runtime dispatches "change" on certain kinds of > changes. > > > So > > > > early implementations in Royale tried to mimic that behavior for > > > folks > > > > coming from Flex. But maybe we should change that and make Basic > > > TextInput > > > > more consistent with browser behavior. The emulation components > > can > > > mimic > > > > the old Flex behavior. So I think using TextInput as precedent > is > > > > misleading. > > > > > > > > Thoughts? > > > > -Alex > > > > > > > > On 12/17/18, 10:55 AM, "Greg Dove" <[email protected]> wrote: > > > > > > > > Alex, I was giving this some more thought also. I understood > > > that you > > > > meant > > > > to add extra events for binding from your previous comments. > > > > > > > > But isn't the established pattern to add a bead to listen for > > the > > > > selectionChange and redispatch it as change? > > > > > > > > At least that seems to be the case elsewhere > > > > > > > > If I look at the code in Basic TextInput... > > > > it dispatches 'textChange' and 'change' but is only Bindable > > via > > > > 'change'. > > > > There is effort to keep them distinct/separate. > > > > (OT: It looks like the swf side needs some consistency in the > > > html > > > > setter > > > > same as the text setter.) > > > > > > > > So TextInput appears to have 2 distinct events but only be > > > Bindable > > > > for one > > > > ('change'). So I presume that to make that support > programmatic > > > > changes it > > > > would be by adding a bead to listen to the 'textChange' and > > > redispatch > > > > as > > > > 'change' ? > > > > > > > > Adding extra Bindable events adds weight because it affects > > > binding > > > > data, > > > > and creates more runtime support for the same feature in use > > > cases > > > > that may > > > > not need it. I don't see how that can be 'PAYG-ised' because > > > binding > > > > support for different event types is either there at compile > > > time or > > > > it is > > > > not in the component. So if the above is true for TextInput > (at > > > this > > > > stage > > > > it's a guess/observation, I did not try this yet), then could > > it > > > not be > > > > similar for selection based components? > > > > > > > > To me 'change' seems like something generic and does not > sound > > > > specific to > > > > being user-initiated change. My understanding is that it just > > > happens > > > > to be > > > > that way by default, unless you configure it to include > > > programmatic > > > > changes via bead. > > > > If it is like this for Basic TextInput, why can it not be the > > > same for > > > > other components ? ( > > > > > > > > > > > > > > > > On Tue, Dec 18, 2018 at 7:32 AM Alex Harui > > > <[email protected]> > > > > wrote: > > > > > > > > > I took a quick look at ArrayListSelection. It could use > some > > > > > improvements, such as only dispatching a single > > > selectionChange event > > > > > instead of both selectedIndexChange and selectedItemChange. > > > > > > > > > > Some controller should dispatch the "change" event, not the > > > model. > > > > > > > > > > I took a quick look at List.as, (a top level component). > It > > > should > > > > have > > > > > bindable metadata that looks like this: > > > > > > > > > > [Bindable("change")] > > > > > [Bindable("selectionChange")] > > > > > public function get selectedIndex():int > > > > > > > > > > Similar for selectedItem. The [Event] metadata for List is > > > > correct, It > > > > > should only list interactive events like "change" and not > > > bindable > > > > events > > > > > like selectionChange. This usually improves performance by > > not > > > > having the > > > > > UI react to setup. > > > > > > > > > > Once all of those changes are made, we should discuss any > > > remaining > > > > issues. > > > > > > > > > > My 2 cents, > > > > > -Alex > > > > > > > > > > On 12/17/18, 10:14 AM, "Piotr Zarzycki" < > > > [email protected]> > > > > > wrote: > > > > > > > > > > Basic ArrayListSelection model doesn't dispatch that > > > event. I > > > > believe > > > > > we > > > > > don't have to do this or rather do this only if we > really > > > need > > > > it, for > > > > > example if someone make programatic change of > > > selectedIndex. - > > > > This is > > > > > general problem how to do that ? > > > > > > > > > > If I change selectedIndex - my model dispatch > > > > selectedInexChanged - > > > > > where > > > > > should I catch it and dispatch "change" event ? My > though > > > are > > > > nowhere, > > > > > unless someone wanted to do that and have a bead. > > > > > > > > > > > > > > > pon., 17 gru 2018 o 19:08 Alex Harui > > > <[email protected]> > > > > > napisał(a): > > > > > > > > > > > Hi Piotr, > > > > > > > > > > > > I may not be understanding your problem. Not all > > models > > > will > > > > > dispatch a > > > > > > change event, but it is hard to imagine a selection > > > model that > > > > > doesn't. > > > > > > > > > > > > -Alex > > > > > > > > > > > > On 12/17/18, 9:36 AM, "Piotr Zarzycki" < > > > > [email protected]> > > > > > wrote: > > > > > > > > > > > > I will review your email again and see what can I > > do > > > this. > > > > > However > > > > > > this one > > > > > > is a second problem. First one was about > > programmatic > > > > change > > > > > discover > > > > > > - If > > > > > > you are talking about that - Let me check your > > > earlier > > > > emails. > > > > > > > > > > > > Thanks, > > > > > > Piotr > > > > > > > > > > > > pon., 17 gru 2018 o 18:30 Alex Harui > > > > <[email protected]> > > > > > > napisał(a): > > > > > > > > > > > > > FWIW, I would much rather see energy spent on > > > trying to > > > > > implement the > > > > > > > patterns I suggested earlier, which will > > hopefully > > > > eliminate > > > > > the > > > > > > need for > > > > > > > DispatchChangeOnStartup. > > > > > > > > > > > > > > My 2 cents, > > > > > > > -Alex > > > > > > > > > > > > > > On 12/17/18, 4:34 AM, "Piotr Zarzycki" < > > > > > [email protected]> > > > > > > wrote: > > > > > > > > > > > > > > Carlos, > > > > > > > > > > > > > > I don't understand this sentence -> " If > not > > > we can > > > > get > > > > > involved > > > > > > in > > > > > > > pursues > > > > > > > problems > > > > > > > that are not real." - What do you mean > here ? > > > > > > > > > > > > > > Ok I can wait for Alex review. > > > > > > > > > > > > > > However your review and look into above > > problem > > > > doesn't > > > > > need > > > > > > Alex's > > > > > > > attention. This bead > > (DispatchChangeOnStartup) > > > > probably > > > > > won't > > > > > > work > > > > > > > doesn't > > > > > > > matter if we fix programmatic change or > not. > > - > > > > Unless I > > > > > bring > > > > > > back > > > > > > > dispatching "change" event from model - > which > > > rather > > > > is not > > > > > > > recommended in > > > > > > > previous discussion. > > > > > > > > > > > > > > Thanks, Piotr > > > > > > > > > > > > > > pon., 17 gru 2018 o 13:14 Carlos Rovira < > > > > > [email protected] > > > > > > > > > > > > > > napisał(a): > > > > > > > > > > > > > > > Hi Piotr, > > > > > > > > > > > > > > > > I think we should solve first the > > programatic > > > > change so > > > > > I can > > > > > > test > > > > > > > the > > > > > > > > branch and see regressions. If not we can > > get > > > > involved in > > > > > > pursues > > > > > > > problems > > > > > > > > that are not real. I think Alex missed > this > > > > discussion. > > > > > I'll > > > > > > point > > > > > > > him in > > > > > > > > this thread to see if he can give his > > opinion > > > > about the > > > > > ways > > > > > > you > > > > > > > proposed > > > > > > > > in the initial thread email. > > > > > > > > > > > > > > > > Thanks! > > > > > > > > > > > > > > > > El lun., 17 dic. 2018 a las 10:57, Piotr > > > Zarzycki > > > > (< > > > > > > > > [email protected]>) escribió: > > > > > > > > > > > > > > > > > Hi Carlos, > > > > > > > > > > > > > > > > > > I just noticed that if model do not > > > dispatch > > > > change > > > > > event - > > > > > > your > > > > > > > bead > > > > > > > > > DispatchChangeOnStartup won't work > > because > > > it > > > > simply > > > > > based on > > > > > > > dispatching > > > > > > > > > "change" event trough model. > > > > > > > > > > > > > > > > > > I'm wondering whether it won't be > enough > > > if that > > > > bead > > > > > listen > > > > > > for > > > > > > > > > "beadsAdded" (here I think it should be > > > > registered for > > > > > > > "initComplete" > > > > > > > > > instead) and dispatch change event > once. > > I > > > made > > > > the > > > > > changes > > > > > > to > > > > > > > that bead, > > > > > > > > > but I don't have scenario which you are > > > using it. > > > > > > > > > > > > > > > > > > Will you be able to test my changes on > > > your > > > > > application end > > > > > > using > > > > > > > my > > > > > > > > > branch ? Above changes are not fully > > > related to > > > > what > > > > > we are > > > > > > > discussing > > > > > > > > > here, so programmatic change still > won't > > > work > > > > yet. > > > > > Please > > > > > > review > > > > > > > those > > > > > > > > > changes as well [1] > > > > > > > > > > > > > > > > > > Those new changes are just to check > > > whether I > > > > won't > > > > > break > > > > > > any of > > > > > > > your > > > > > > > > > functionality on startup. I will move > for > > > > creating > > > > > bead for > > > > > > > discovering > > > > > > > > > programmatic changes, but first would > > like > > > to > > > > know > > > > > whether > > > > > > till now > > > > > > > > > everything is working fine. > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fcommit%2F14f6354e037e5854900ef5620581f6914bd604c4&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044098722&sdata=63TqFe1D1baSKYc3b9h2hr3ckWveZJjcOVhsynzOVXE%3D&reserved=0 > > > > > > > > > > > > > > > > > > Thanks, Piotr > > > > > > > > > > > > > > > > > > > > > > > > > > > pt., 14 gru 2018 o 19:55 Carlos Rovira > < > > > > > > [email protected]> > > > > > > > > > napisał(a): > > > > > > > > > > > > > > > > > > > Hi Piotr, > > > > > > > > > > > > > > > > > > > > after check example code, we have: > > > > > > > > > > > > > > > > > > > > <j:ComboBox id="watchmenComboBox" > > > > > > > dataProvider="{listModel.watchmen}"> > > > > > > > > > > ... > > > > > > > > > > then NS: > > > > > > > > > > > > > > > > > > > > <j:NumericStepper > > > > > > valueChange="watchmenComboBox.selectedIndex = > > > > > > > > > > event.target.value" minimum="0" > > > maximum="5"/> > > > > > > > > > > > > > > > > > > > > and finally > > > > > > > > > > > > > > > > > > > > <j:Label id="watchmenComboBoxResult" > > > html= > > > > > > > > > > > > > > "{describeItem(watchmenComboBox.selectedItem)}"/> > > > > > > > > > > > > > > > > > > > > I think right now works as expected, > > > since the > > > > > change is > > > > > > > programatic > > > > > > > > (is > > > > > > > > > > not the user clicking in the combo > list > > > and > > > > selecting > > > > > > other item > > > > > > > > > > > > > > > > > > > > So I think a bead should be better in > > > this > > > > case, that > > > > > > takes care > > > > > > > of > > > > > > > > this > > > > > > > > > > behavior. > > > > > > > > > > > > > > > > > > > > I'm interested in Alex response about > > > how to > > > > handle > > > > > it > > > > > > > > > > > > > > > > > > > > Thanks Piotr for working on this > > > > > > > > > > > > > > > > > > > > Carlos > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > El vie., 14 dic. 2018 a las 17:02, > > Piotr > > > > Zarzycki (< > > > > > > > > > > [email protected]>) > escribió: > > > > > > > > > > > > > > > > > > > > > Hi Carlos, > > > > > > > > > > > > > > > > > > > > > > I have created issue [1] and branch > > > [2] for > > > > > problem with > > > > > > double > > > > > > > > > dispatch > > > > > > > > > > > "change" event. > > > > > > > > > > > I have pushed changes when I'm > > > removing from > > > > > > > ArrayListSelectionModel > > > > > > > > > > > dispatch of change event. > > > > > > > > > > > > > > > > > > > > > > Above action successfully fix > however > > > like I > > > > > thought it's > > > > > > > introduces > > > > > > > > > > > another one which I would like to > > > discuss > > > > how to > > > > > fix. I > > > > > > have > > > > > > > deployed > > > > > > > > > > > temporary Tour De Jewel here [3] in > > > order to > > > > show > > > > > you > > > > > > and to > > > > > > > others > > > > > > > > > that > > > > > > > > > > > issue. > > > > > > > > > > > > > > > > > > > > > > *New Issue:* > > > > > > > > > > > When you go to ComboBox and try to > > > change > > > > > selectedIndex > > > > > > using > > > > > > > > > > > NumericStepper it will successfully > > > change > > > > > selectedItem > > > > > > in > > > > > > > ComboBox. > > > > > > > > > > > Unfortunately label on the right > > sight > > > of > > > > ComboBox > > > > > won't > > > > > > be > > > > > > > updated. > > > > > > > > > > > > > > > > > > > > > > *Question is:* > > > > > > > > > > > How should be implemented discover > of > > > > programmatic > > > > > > change of > > > > > > > > > > selectedIndex > > > > > > > > > > > and selectedItem ? > > > > > > > > > > > > > > > > > > > > > > *I see following options:* > > > > > > > > > > > 1) We should listen on events > > > > > > > > selectedIndexChanged/selectedItemChanged > > > > > > > > > > and > > > > > > > > > > > dispatch "change" from components > > View > > > bead. > > > > In > > > > > this way > > > > > > we > > > > > > > have to > > > > > > > > > take > > > > > > > > > > > into account places where "we" as a > > > component > > > > > setup those > > > > > > > properties > > > > > > > > > > > internally - In that case > > > > "selectedIndexChanged" > > > > > and > > > > > > > > > > "selectedItemChanged" > > > > > > > > > > > event shouldn't be dispatch. > > > > > > > > > > > > > > > > > > > > > > 2) Create separate bead which > allows > > > discover > > > > > > programmatic > > > > > > > change of > > > > > > > > > > > selectedIndex and selectedItem- > cause > > > not > > > > everyone > > > > > > wanted to > > > > > > > have at > > > > > > > > > all > > > > > > > > > > > programmatic change event in the > > > component - > > > > > probably > > > > > > most of > > > > > > > the > > > > > > > > cases > > > > > > > > > > > will be opposite. > > > > > > > > > > > > > > > > > > > > > > What others think about that ? > > > > > > > > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fissues%2F353&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044098722&sdata=G8eJrIYW%2BaEIRFcu0dSFbKEcR%2Fy%2BpKlD1YzbMgM3re0%3D&reserved=0 > > > > > > > > > > > [2] > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Ftree%2Fbugfix%2Fissue_353_double_dispatch_of_change_event_in_Jewel_List&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044098722&sdata=X65GmRCgzhAIaW7PO%2BiyQaPvFlREYeFYCcVEGvcM28s%3D&reserved=0 > > > > > > > > > > > [3] > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Ftranspiledactionscript.com%2Fdev%2Froyale%2F%23&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044098722&sdata=LRkRN%2BGRgjtdiNTNN9oZY1hZFbOm0IIG%2BiScrnd5GK0%3D&reserved=0 > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > > > > > Piotr Zarzycki > > > > > > > > > > > > > > > > > > > > > > Patreon: * > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > >* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > Carlos Rovira > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=2VTZlF8coTwrP1A93NJ6v0Gx5vmQJAFUsTGGvBpaeDA%3D&reserved=0 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > Piotr Zarzycki > > > > > > > > > > > > > > > > > > Patreon: * > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > >* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Carlos Rovira > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=2VTZlF8coTwrP1A93NJ6v0Gx5vmQJAFUsTGGvBpaeDA%3D&reserved=0 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > > > Piotr Zarzycki > > > > > > > > > > > > > > Patreon: * > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > < > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > > >* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > Piotr Zarzycki > > > > > > > > > > > > Patreon: * > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > < > > > > > > > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > > >* > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > Piotr Zarzycki > > > > > > > > > > Patreon: * > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044108732&sdata=yiyoM5h4LpKD2Tkl3P2KXnTN6CnH2eWzzPOgCdD9IB0%3D&reserved=0 > > > > > < > > > > > > > > > > > > > > > https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C36d3d0b5a2a04dbda1fe08d6645f1dee%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636806757044118737&sdata=T9ppp9S1zyhwOul7XszcdSgixIIsAHFTdPJm%2FYvUXa4%3D&reserved=0 > > > > > >* > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > Piotr Zarzycki > > > > Patreon: *https://www.patreon.com/piotrzarzycki > > <https://www.patreon.com/piotrzarzycki>* > > > -- Piotr Zarzycki Patreon: *https://www.patreon.com/piotrzarzycki <https://www.patreon.com/piotrzarzycki>*
